home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / GCC 1.37.1r14 / usr / gcc-1.37.1r14 / (gcc-1.37.π) / c-parse.tab.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-07-19  |  146.2 KB  |  4,599 lines  |  [TEXT/KAHL]

  1.  
  2. /*  A Bison parser, made from ./c-parse.y  */
  3.  
  4. #define    IDENTIFIER    258
  5. #define    TYPENAME    259
  6. #define    SCSPEC    260
  7. #define    TYPESPEC    261
  8. #define    TYPE_QUAL    262
  9. #define    CONSTANT    263
  10. #define    STRING    264
  11. #define    ELLIPSIS    265
  12. #define    SIZEOF    266
  13. #define    ENUM    267
  14. #define    STRUCT    268
  15. #define    UNION    269
  16. #define    IF    270
  17. #define    ELSE    271
  18. #define    WHILE    272
  19. #define    DO    273
  20. #define    FOR    274
  21. #define    SWITCH    275
  22. #define    CASE    276
  23. #define    DEFAULT    277
  24. #define    BREAK    278
  25. #define    CONTINUE    279
  26. #define    RETURN    280
  27. #define    GOTO    281
  28. #define    ASM    282
  29. #define    TYPEOF    283
  30. #define    ALIGNOF    284
  31. #define    ATTRIBUTE    285
  32. #define    ASSIGN    286
  33. #define    OROR    287
  34. #define    ANDAND    288
  35. #define    EQCOMPARE    289
  36. #define    ARITHCOMPARE    290
  37. #define    LSHIFT    291
  38. #define    RSHIFT    292
  39. #define    UNARY    293
  40. #define    PLUSPLUS    294
  41. #define    MINUSMINUS    295
  42. #define    HYPERUNARY    296
  43. #define    POINTSAT    297
  44.  
  45. #line 40 "./c-parse.y"
  46.  
  47. #include "config.h"
  48. #include "tree.h"
  49. #include "input.h"
  50. #include "c-parse.h"
  51. #include "c-tree.h"
  52.  
  53. #include <stdio.h>
  54. #include <errno.h>
  55.  
  56. #ifndef errno
  57. extern int errno;
  58. #endif
  59.  
  60. void yyerror ();
  61.  
  62. /* Cause the `yydebug' variable to be defined.  */
  63. #define YYDEBUG 1
  64.  
  65. #line 62 "./c-parse.y"
  66. typedef union {long itype; tree ttype; enum tree_code code; } YYSTYPE;
  67. #line 154 "./c-parse.y"
  68.  
  69. /* the declaration found for the last IDENTIFIER token read in.
  70.    yylex must look this up to detect typedefs, which get token type TYPENAME,
  71.    so it is left around in case the identifier is not a typedef but is
  72.    used in a context which makes it a reference to a variable.  */
  73. static tree lastiddecl;
  74.  
  75. static tree make_pointer_declarator ();
  76. static tree combine_strings ();
  77. static void reinit_parse_for_function ();
  78.  
  79. /* List of types and structure classes of the current declaration.  */
  80. tree current_declspecs;
  81.  
  82. /* Stack of saved values of current_declspecs.  */
  83. tree declspec_stack;
  84.  
  85. int undeclared_variable_notice;    /* 1 if we explained undeclared var errors.  */
  86.  
  87. static int yylex ();
  88.  
  89. #ifndef YYLTYPE
  90. typedef
  91.   struct yyltype
  92.     {
  93.       int timestamp;
  94.       int first_line;
  95.       int first_column;
  96.       int last_line;
  97.       int last_column;
  98.       char *text;
  99.    }
  100.   yyltype;
  101.  
  102. #define YYLTYPE yyltype
  103. #endif
  104.  
  105. #include <stdio.h>
  106.  
  107. #ifndef __STDC__
  108. #define const
  109. #endif
  110.  
  111.  
  112.  
  113. #define    YYFINAL        514
  114. #define    YYFLAG        -32768
  115. #define    YYNTBASE    65
  116.  
  117. #define YYTRANSLATE(x) ((unsigned)(x) <= 297 ? yytranslate[x] : 171)
  118.  
  119. static const char yytranslate[] = {     0,
  120.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  121.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  122.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  123.      2,     2,    61,     2,     2,     2,    48,    39,     2,    55,
  124.     57,    46,    44,    62,    45,    54,    47,     2,     2,     2,
  125.      2,     2,     2,     2,     2,     2,     2,    34,    58,     2,
  126.     32,     2,    33,     2,     2,     2,     2,     2,     2,     2,
  127.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  128.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  129.     56,     2,    64,    38,     2,     2,     2,     2,     2,     2,
  130.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  131.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  132.      2,     2,    63,    37,    59,    60,     2,     2,     2,     2,
  133.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  134.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  135.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  136.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  137.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  138.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  139.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  140.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  141.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  142.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  143.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  144.      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  145.      2,     2,     2,     2,     2,     1,     2,     3,     4,     5,
  146.      6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
  147.     16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
  148.     26,    27,    28,    29,    30,    31,    35,    36,    40,    41,
  149.     42,    43,    49,    50,    51,    52,    53
  150. };
  151.  
  152. static const short yyprhs[] = {     0,
  153.      0,     1,     3,     4,     7,     8,    12,    14,    16,    22,
  154.     26,    31,    36,    39,    42,    45,    48,    50,    51,    52,
  155.     60,    65,    66,    67,    75,    80,    81,    82,    89,    93,
  156.     95,    97,    99,   101,   103,   105,   107,   109,   111,   113,
  157.    114,   116,   118,   122,   124,   127,   130,   133,   138,   141,
  158.    146,   148,   153,   161,   163,   167,   171,   175,   179,   183,
  159.    187,   191,   195,   199,   203,   207,   211,   215,   219,   225,
  160.    229,   233,   235,   237,   239,   243,   247,   248,   253,   258,
  161.    263,   267,   271,   274,   277,   279,   282,   283,   285,   287,
  162.    289,   292,   295,   296,   301,   306,   309,   312,   315,   319,
  163.    320,   323,   326,   328,   330,   333,   336,   339,   343,   344,
  164.    347,   349,   351,   353,   358,   363,   365,   367,   369,   371,
  165.    375,   377,   381,   382,   387,   388,   395,   399,   400,   407,
  166.    411,   412,   419,   421,   425,   427,   432,   437,   439,   442,
  167.    446,   451,   453,   455,   459,   461,   463,   467,   471,   476,
  168.    480,   484,   486,   490,   495,   499,   503,   505,   509,   513,
  169.    517,   522,   526,   528,   529,   536,   541,   544,   545,   552,
  170.    557,   560,   561,   569,   570,   577,   580,   581,   583,   584,
  171.    586,   587,   591,   594,   598,   602,   604,   605,   607,   611,
  172.    614,   619,   622,   624,   628,   630,   634,   637,   640,   641,
  173.    643,   645,   648,   649,   652,   656,   660,   663,   667,   672,
  174.    676,   679,   683,   686,   688,   691,   694,   695,   697,   700,
  175.    701,   703,   706,   709,   715,   720,   725,   726,   733,   735,
  176.    738,   739,   744,   746,   747,   748,   756,   757,   758,   768,
  177.    769,   770,   771,   784,   785,   792,   793,   799,   800,   805,
  178.    808,   811,   814,   818,   825,   834,   845,   858,   862,   863,
  179.    868,   870,   871,   873,   874,   876,   877,   879,   881,   885,
  180.    890,   892,   896,   897,   900,   901,   904,   907,   910,   913,
  181.    916,   919,   920,   922,   926,   928,   932,   935,   938,   941,
  182.    944,   947,   949
  183. };
  184.  
  185. static const short yyrhs[] = {    -1,
  186.     66,     0,     0,    67,    69,     0,     0,    66,    68,    69,
  187.      0,    71,     0,    70,     0,    27,    55,    88,    57,    58,
  188.      0,    91,   101,    58,     0,    95,    91,   101,    58,     0,
  189.     93,    91,   100,    58,     0,    95,    58,     0,    93,    58,
  190.      0,     1,    58,     0,     1,    59,     0,    58,     0,     0,
  191.      0,    93,    91,   112,    72,    89,    73,   138,     0,    93,
  192.     91,   112,     1,     0,     0,     0,    95,    91,   115,    74,
  193.     89,    75,   138,     0,    95,    91,   115,     1,     0,     0,
  194.      0,    91,   115,    76,    89,    77,   138,     0,    91,   115,
  195.      1,     0,     3,     0,     4,     0,    39,     0,    45,     0,
  196.     44,     0,    50,     0,    51,     0,    60,     0,    61,     0,
  197.     82,     0,     0,    82,     0,    85,     0,    82,    62,    85,
  198.      0,    86,     0,    46,    84,     0,    79,    84,     0,    11,
  199.     83,     0,    11,    55,   129,    57,     0,    29,    83,     0,
  200.     29,    55,   129,    57,     0,    83,     0,    55,   129,    57,
  201.     84,     0,    55,   129,    57,    63,   111,   121,    59,     0,
  202.     84,     0,    85,    44,    85,     0,    85,    45,    85,     0,
  203.     85,    46,    85,     0,    85,    47,    85,     0,    85,    48,
  204.     85,     0,    85,    42,    85,     0,    85,    43,    85,     0,
  205.     85,    41,    85,     0,    85,    40,    85,     0,    85,    39,
  206.     85,     0,    85,    37,    85,     0,    85,    38,    85,     0,
  207.     85,    36,    85,     0,    85,    35,    85,     0,    85,    33,
  208.    156,    34,    85,     0,    85,    32,    85,     0,    85,    31,
  209.     85,     0,     3,     0,     8,     0,    88,     0,    55,    80,
  210.     57,     0,    55,     1,    57,     0,     0,    55,    87,   139,
  211.     57,     0,    86,    55,    81,    57,     0,    86,    56,    80,
  212.     64,     0,    86,    54,    78,     0,    86,    53,    78,     0,
  213.     86,    50,     0,    86,    51,     0,     9,     0,    88,     9,
  214.      0,     0,    90,     0,    92,     0,   136,     0,    90,    92,
  215.      0,    92,   136,     0,     0,    93,    91,   100,    58,     0,
  216.     95,    91,   101,    58,     0,    93,    58,     0,    95,    58,
  217.      0,    98,    94,     0,    95,    98,    94,     0,     0,    94,
  218.     99,     0,    94,     5,     0,     7,     0,     5,     0,    95,
  219.      7,     0,    95,     5,     0,    98,    97,     0,   131,    98,
  220.     97,     0,     0,    97,    99,     0,     6,     0,   116,     0,
  221.      4,     0,    28,    55,    80,    57,     0,    28,    55,   129,
  222.     57,     0,     6,     0,     7,     0,   116,     0,   103,     0,
  223.    100,    62,   103,     0,   105,     0,   101,    62,   103,     0,
  224.      0,    27,    55,    88,    57,     0,     0,   112,   102,   107,
  225.     32,   104,   110,     0,   112,   102,   107,     0,     0,   115,
  226.    102,   107,    32,   106,   110,     0,   115,   102,   107,     0,
  227.      0,    30,    55,    55,   108,    57,    57,     0,   109,     0,
  228.    108,    62,   109,     0,     3,     0,     3,    55,     8,    57,
  229.      0,     3,    55,   170,    57,     0,    85,     0,    63,    59,
  230.      0,    63,   111,    59,     0,    63,   111,    62,    59,     0,
  231.      1,     0,   110,     0,   111,    62,   110,     0,   113,     0,
  232.    115,     0,    55,   113,    57,     0,   113,    55,   163,     0,
  233.    113,    56,    80,    64,     0,   113,    56,    64,     0,    46,
  234.    132,   113,     0,     4,     0,   114,    55,   163,     0,   114,
  235.     56,    80,    64,     0,   114,    56,    64,     0,    46,   132,
  236.    114,     0,     4,     0,   115,    55,   163,     0,    55,   115,
  237.     57,     0,    46,   132,   115,     0,   115,    56,    80,    64,
  238.      0,   115,    56,    64,     0,     3,     0,     0,    13,    78,
  239.     63,   117,   123,    59,     0,    13,    63,   123,    59,     0,
  240.     13,    78,     0,     0,    14,    78,    63,   118,   123,    59,
  241.      0,    14,    63,   123,    59,     0,    14,    78,     0,     0,
  242.     12,    78,    63,   119,   127,   122,    59,     0,     0,    12,
  243.     63,   120,   127,   122,    59,     0,    12,    78,     0,     0,
  244.     62,     0,     0,    62,     0,     0,   123,   124,    58,     0,
  245.    123,    58,     0,    96,    91,   125,     0,   131,    91,   125,
  246.      0,     1,     0,     0,   126,     0,   125,    62,   126,     0,
  247.    112,   107,     0,   112,    34,    85,   107,     0,    34,    85,
  248.      0,   128,     0,   127,    62,   128,     0,    78,     0,    78,
  249.     32,    85,     0,    96,   130,     0,   131,   130,     0,     0,
  250.    133,     0,     7,     0,   131,     7,     0,     0,   132,     7,
  251.      0,    55,   133,    57,     0,    46,   132,   133,     0,    46,
  252.    132,     0,   133,    55,   161,     0,   133,    56,    80,    64,
  253.      0,   133,    56,    64,     0,    55,   161,     0,    56,    80,
  254.     64,     0,    56,    64,     0,   142,     0,   134,   142,     0,
  255.    134,   136,     0,     0,   134,     0,     1,    58,     0,     0,
  256.    139,     0,     1,   139,     0,    63,    59,     0,    63,   137,
  257.     90,   135,    59,     0,    63,   137,     1,    59,     0,    63,
  258.    137,   134,    59,     0,     0,    15,    55,    80,    57,   141,
  259.    142,     0,   139,     0,    80,    58,     0,     0,   140,    16,
  260.    143,   142,     0,   140,     0,     0,     0,    17,   144,    55,
  261.     80,    57,   145,   142,     0,     0,     0,    18,   146,   142,
  262.     17,   147,    55,    80,    57,    58,     0,     0,     0,     0,
  263.     19,    55,   156,    58,   148,   156,    58,   149,   156,    57,
  264.    150,   142,     0,     0,    20,    55,    80,    57,   151,   142,
  265.      0,     0,    21,    80,    34,   152,   142,     0,     0,    22,
  266.     34,   153,   142,     0,    23,    58,     0,    24,    58,     0,
  267.     25,    58,     0,    25,    80,    58,     0,    27,   155,    55,
  268.     88,    57,    58,     0,    27,   155,    55,    88,    34,   157,
  269.     57,    58,     0,    27,   155,    55,    88,    34,   157,    34,
  270.    157,    57,    58,     0,    27,   155,    55,    88,    34,   157,
  271.     34,   157,    34,   160,    57,    58,     0,    26,    78,    58,
  272.      0,     0,    78,    34,   154,   142,     0,    58,     0,     0,
  273.      7,     0,     0,    80,     0,     0,   158,     0,   159,     0,
  274.    158,    62,   159,     0,     9,    55,    80,    57,     0,    88,
  275.      0,   160,    62,    88,     0,     0,   162,   166,     0,     0,
  276.    164,   165,     0,   167,    57,     0,   170,    57,     0,     1,
  277.     57,     0,   167,    57,     0,     1,    57,     0,     0,   168,
  278.      0,   168,    62,    10,     0,   169,     0,   168,    62,   169,
  279.      0,    93,   114,     0,    93,   115,     0,    93,   130,     0,
  280.     95,   115,     0,    95,   130,     0,     3,     0,   170,    62,
  281.      3,     0
  282. };
  283.  
  284. #if YYDEBUG != 0
  285. static const short yyrline[] = { 0,
  286.    177,   178,   185,   187,   187,   188,   190,   192,   193,   200,
  287.    206,   208,   210,   212,   214,   215,   216,   221,   227,   229,
  288.    230,   232,   237,   239,   240,   242,   247,   249,   250,   254,
  289.    256,   259,   261,   263,   265,   267,   269,   271,   275,   279,
  290.    282,   285,   288,   292,   294,   296,   298,   311,   313,   346,
  291.    350,   352,   355,   369,   371,   373,   375,   377,   379,   381,
  292.    383,   385,   387,   389,   391,   393,   395,   397,   399,   401,
  293.    403,   407,   461,   462,   464,   466,   468,   476,   488,   490,
  294.    492,   494,   496,   498,   503,   505,   509,   511,   514,   516,
  295.    517,   518,   525,   532,   537,   541,   543,   551,   554,   558,
  296.    560,   562,   570,   573,   575,   577,   586,   589,   593,   595,
  297.    603,   604,   605,   606,   610,   618,   619,   620,   623,   625,
  298.    628,   630,   633,   636,   644,   649,   650,   655,   660,   661,
  299.    667,   670,   675,   676,   680,   684,   692,   698,   700,   704,
  300.    706,   708,   714,   717,   724,   726,   731,   734,   739,   741,
  301.    743,   745,   753,   759,   761,   763,   765,   771,   777,   779,
  302.    781,   783,   785,   788,   793,   797,   800,   802,   804,   806,
  303.    809,   811,   814,   817,   820,   823,   827,   829,   832,   834,
  304.    838,   840,   842,   856,   862,   867,   871,   876,   877,   881,
  305.    884,   886,   895,   897,   902,   905,   909,   912,   916,   919,
  306.    922,   925,   929,   932,   936,   940,   942,   944,   946,   948,
  307.    950,   952,   954,   962,   964,   965,   968,   970,   973,   976,
  308.    985,   988,   991,   993,   997,  1001,  1007,  1012,  1014,  1016,
  309.   1026,  1029,  1030,  1032,  1036,  1040,  1041,  1045,  1047,  1052,
  310.   1058,  1062,  1068,  1074,  1081,  1083,  1115,  1115,  1126,  1126,
  311.   1130,  1134,  1137,  1140,  1145,  1152,  1159,  1166,  1172,  1178,
  312.   1178,  1183,  1188,  1194,  1197,  1202,  1204,  1207,  1209,  1213,
  313.   1218,  1221,  1227,  1231,  1238,  1242,  1247,  1249,  1251,  1255,
  314.   1257,  1263,  1265,  1267,  1271,  1274,  1280,  1283,  1285,  1287,
  315.   1289,  1294,  1297
  316. };
  317.  
  318. static const char * const yytname[] = {   "$",
  319. "error","$illegal.","IDENTIFIER","TYPENAME","SCSPEC","TYPESPEC","TYPE_QUAL","CONSTANT","STRING","ELLIPSIS",
  320. "SIZEOF","ENUM","STRUCT","UNION","IF","ELSE","WHILE","DO","FOR","SWITCH",
  321. "CASE","DEFAULT","BREAK","CONTINUE","RETURN","GOTO","ASM","TYPEOF","ALIGNOF","ATTRIBUTE",
  322. "ASSIGN","'='","'?'","':'","OROR","ANDAND","'|'","'^'","'&'","EQCOMPARE",
  323. "ARITHCOMPARE","LSHIFT","RSHIFT","'+'","'-'","'*'","'/'","'%'","UNARY","PLUSPLUS",
  324. "MINUSMINUS","HYPERUNARY","POINTSAT","'.'","'('","'['","')'","';'","'}'","'~'",
  325. "'!'","','","'{'","']'","program","extdefs","@1","@2","extdef","datadef",
  326. "fndef","@3","@4","@5","@6","@7","@8","identifier","unop","expr",
  327. "exprlist","nonnull_exprlist","unary_expr","cast_expr","expr_no_commas","primary","@9","string","xdecls","decls",
  328. "setspecs","decl","typed_declspecs","reserved_declspecs","declmods","typed_typespecs","reserved_typespecquals","typespec","typespecqual_reserved","initdecls",
  329. "notype_initdecls","maybeasm","initdcl","@10","notype_initdcl","@11","maybe_attribute","attribute_list","attrib","init",
  330. "initlist","declarator","after_type_declarator","parm_declarator","notype_declarator","structsp","@12","@13","@14","@15",
  331. "maybecomma","maybecomma_warn","component_decl_list","component_decl","components","component_declarator","enumlist","enumerator","typename","absdcl",
  332. "nonempty_type_quals","type_quals","absdcl1","stmts","xstmts","errstmt","pushlevel","compstmt_or_error","compstmt","simple_if",
  333. "@16","stmt","@17","@18","@19","@20","@21","@22","@23","@24",
  334. "@25","@26","@27","@28","maybe_type_qual","xexpr","asm_operands","nonnull_asm_operands","asm_operand","asm_clobbers",
  335. "parmlist","@29","parmlist_or_identifiers","@30","parmlist_or_identifiers_1","parmlist_1","parmlist_2","parms","parm","identifiers",
  336. ""
  337. };
  338. #endif
  339.  
  340. static const short yyr1[] = {     0,
  341.     65,    65,    67,    66,    68,    66,    69,    69,    69,    70,
  342.     70,    70,    70,    70,    70,    70,    70,    72,    73,    71,
  343.     71,    74,    75,    71,    71,    76,    77,    71,    71,    78,
  344.     78,    79,    79,    79,    79,    79,    79,    79,    80,    81,
  345.     81,    82,    82,    83,    83,    83,    83,    83,    83,    83,
  346.     84,    84,    84,    85,    85,    85,    85,    85,    85,    85,
  347.     85,    85,    85,    85,    85,    85,    85,    85,    85,    85,
  348.     85,    86,    86,    86,    86,    86,    87,    86,    86,    86,
  349.     86,    86,    86,    86,    88,    88,    89,    89,    90,    90,
  350.     90,    90,    91,    92,    92,    92,    92,    93,    93,    94,
  351.     94,    94,    95,    95,    95,    95,    96,    96,    97,    97,
  352.     98,    98,    98,    98,    98,    99,    99,    99,   100,   100,
  353.    101,   101,   102,   102,   104,   103,   103,   106,   105,   105,
  354.    107,   107,   108,   108,   109,   109,   109,   110,   110,   110,
  355.    110,   110,   111,   111,   112,   112,   113,   113,   113,   113,
  356.    113,   113,   114,   114,   114,   114,   114,   115,   115,   115,
  357.    115,   115,   115,   117,   116,   116,   116,   118,   116,   116,
  358.    116,   119,   116,   120,   116,   116,   121,   121,   122,   122,
  359.    123,   123,   123,   124,   124,   124,   125,   125,   125,   126,
  360.    126,   126,   127,   127,   128,   128,   129,   129,   130,   130,
  361.    131,   131,   132,   132,   133,   133,   133,   133,   133,   133,
  362.    133,   133,   133,   134,   134,   134,   135,   135,   136,   137,
  363.    138,   138,   139,   139,   139,   139,   141,   140,   142,   142,
  364.    143,   142,   142,   144,   145,   142,   146,   147,   142,   148,
  365.    149,   150,   142,   151,   142,   152,   142,   153,   142,   142,
  366.    142,   142,   142,   142,   142,   142,   142,   142,   154,   142,
  367.    142,   155,   155,   156,   156,   157,   157,   158,   158,   159,
  368.    160,   160,   162,   161,   164,   163,   165,   165,   165,   166,
  369.    166,   167,   167,   167,   168,   168,   169,   169,   169,   169,
  370.    169,   170,   170
  371. };
  372.  
  373. static const short yyr2[] = {     0,
  374.      0,     1,     0,     2,     0,     3,     1,     1,     5,     3,
  375.      4,     4,     2,     2,     2,     2,     1,     0,     0,     7,
  376.      4,     0,     0,     7,     4,     0,     0,     6,     3,     1,
  377.      1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
  378.      1,     1,     3,     1,     2,     2,     2,     4,     2,     4,
  379.      1,     4,     7,     1,     3,     3,     3,     3,     3,     3,
  380.      3,     3,     3,     3,     3,     3,     3,     3,     5,     3,
  381.      3,     1,     1,     1,     3,     3,     0,     4,     4,     4,
  382.      3,     3,     2,     2,     1,     2,     0,     1,     1,     1,
  383.      2,     2,     0,     4,     4,     2,     2,     2,     3,     0,
  384.      2,     2,     1,     1,     2,     2,     2,     3,     0,     2,
  385.      1,     1,     1,     4,     4,     1,     1,     1,     1,     3,
  386.      1,     3,     0,     4,     0,     6,     3,     0,     6,     3,
  387.      0,     6,     1,     3,     1,     4,     4,     1,     2,     3,
  388.      4,     1,     1,     3,     1,     1,     3,     3,     4,     3,
  389.      3,     1,     3,     4,     3,     3,     1,     3,     3,     3,
  390.      4,     3,     1,     0,     6,     4,     2,     0,     6,     4,
  391.      2,     0,     7,     0,     6,     2,     0,     1,     0,     1,
  392.      0,     3,     2,     3,     3,     1,     0,     1,     3,     2,
  393.      4,     2,     1,     3,     1,     3,     2,     2,     0,     1,
  394.      1,     2,     0,     2,     3,     3,     2,     3,     4,     3,
  395.      2,     3,     2,     1,     2,     2,     0,     1,     2,     0,
  396.      1,     2,     2,     5,     4,     4,     0,     6,     1,     2,
  397.      0,     4,     1,     0,     0,     7,     0,     0,     9,     0,
  398.      0,     0,    12,     0,     6,     0,     5,     0,     4,     2,
  399.      2,     2,     3,     6,     8,    10,    12,     3,     0,     4,
  400.      1,     0,     1,     0,     1,     0,     1,     1,     3,     4,
  401.      1,     3,     0,     2,     0,     2,     2,     2,     2,     2,
  402.      2,     0,     1,     3,     1,     3,     2,     2,     2,     2,
  403.      2,     1,     3
  404. };
  405.  
  406. static const short yydefact[] = {     3,
  407.      5,     0,     0,     0,   113,   104,   111,   103,     0,     0,
  408.      0,     0,     0,    17,     4,     8,     7,     0,    93,    93,
  409.    100,   112,     6,    15,    16,    30,    31,   174,   176,   181,
  410.    167,   181,   171,     0,     0,   163,   203,     0,     0,   121,
  411.      0,    14,     0,   106,   105,    13,     0,   100,    98,     0,
  412.    172,     0,   164,     0,   168,    85,     0,    72,   201,    73,
  413.      0,     0,    32,    34,    33,     0,    35,    36,     0,    37,
  414.     38,     0,     0,    39,    51,    54,    42,    44,    74,   199,
  415.    109,     0,   199,     0,     0,    10,     0,    29,     0,   275,
  416.      0,     0,   131,   152,   203,     0,     0,   119,     0,   145,
  417.    146,     0,     0,    99,   102,   116,   117,   101,   118,   195,
  418.    179,   193,     0,   186,   183,   166,    93,     0,    93,   181,
  419.    170,   181,    86,     0,     0,    47,     0,    49,    45,     0,
  420.      0,     0,     0,    46,   114,     0,     0,     0,   264,     0,
  421.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  422.      0,     0,     0,    83,    84,     0,     0,    40,     0,   203,
  423.    273,     0,   197,   200,   107,   115,   202,   109,   198,   204,
  424.    160,   159,   122,   123,     0,   158,     0,   162,     0,     0,
  425.     27,    88,     0,    93,    93,    90,     0,   130,     0,     0,
  426.     12,     0,    21,     0,   131,   275,     0,    11,    25,     0,
  427.      0,   180,     0,   179,   187,   182,   187,     0,     0,     9,
  428.      0,     0,    76,    75,   220,     0,     0,    43,    71,    70,
  429.    265,     0,    68,    67,    65,    66,    64,    63,    62,    60,
  430.     61,    55,    56,    57,    58,    59,    82,    81,     0,    41,
  431.      0,   207,     0,   211,     0,   213,     0,   273,     0,   110,
  432.    108,     0,     0,   292,   199,   199,   276,     0,   283,   285,
  433.      0,   161,   219,     0,    91,    92,    96,     0,    97,     0,
  434.      0,   128,   151,   147,   120,    19,   127,   148,   150,     0,
  435.     23,   196,   194,   175,     0,     0,   131,   184,   188,   185,
  436.    165,   169,    48,    50,   223,     0,    78,     0,    52,     0,
  437.     79,    80,   206,   205,     0,   274,     0,   212,   208,   210,
  438.      0,   124,   279,   157,   203,   273,   287,   288,   289,   203,
  439.    290,   291,   277,     0,   278,     0,     0,    28,   221,     0,
  440.      0,   123,     0,     0,     0,   125,   149,     0,   173,   192,
  441.      0,   190,     0,     0,    72,   113,     0,   234,   237,     0,
  442.      0,     0,     0,     0,     0,     0,     0,   262,   261,     0,
  443.      0,   217,     0,   229,   233,   214,   142,     0,   138,   143,
  444.    177,    69,   281,   280,   209,   207,   275,     0,   207,   284,
  445.    286,   293,   222,    94,    95,   135,     0,   133,   129,    20,
  446.      0,    24,   131,   189,   225,     0,     0,     0,   264,     0,
  447.      0,   248,   250,   251,   252,     0,     0,   263,     0,   259,
  448.    230,     0,     0,   226,   216,   215,   231,   139,     0,     0,
  449.      0,   156,   153,   155,     0,     0,     0,     0,   126,   191,
  450.      0,     0,     0,     0,     0,   246,     0,   253,   258,     0,
  451.      0,   224,     0,   140,     0,   144,    53,   154,     0,     0,
  452.    132,   134,   227,     0,   238,   240,   244,     0,   249,     0,
  453.    260,   232,   141,   136,   137,     0,   235,     0,   264,     0,
  454.    247,   266,     0,   228,     0,     0,     0,   245,     0,     0,
  455.    267,   268,   254,   236,     0,   241,     0,   266,     0,     0,
  456.      0,   264,     0,     0,   255,   269,   239,     0,   270,     0,
  457.      0,   242,   271,     0,   256,     0,     0,     0,   243,   257,
  458.    272,     0,     0,     0
  459. };
  460.  
  461. static const short yydefgoto[] = {   512,
  462.      1,     2,     3,    15,    16,    17,   194,   335,   200,   338,
  463.     92,   264,   360,    72,   361,   239,    74,    75,    76,    77,
  464.     78,   132,    79,   181,   182,    18,   183,   184,    49,   185,
  465.     80,   165,    21,   108,    97,    39,    93,    98,   391,    40,
  466.    334,   188,   387,   388,   370,   371,   174,   100,   317,   101,
  467.     22,   120,   122,   113,    50,   421,   203,    52,   118,   288,
  468.    289,   111,   112,    82,   163,    83,    84,   164,   363,   413,
  469.    186,   296,   328,   364,   365,   466,   366,   443,   397,   475,
  470.    398,   468,   469,   492,   506,   470,   458,   437,   441,   409,
  471.    222,   480,   481,   482,   504,   244,   245,   176,   177,   257,
  472.    306,   258,   259,   260,   261
  473. };
  474.  
  475. static const short yypact[] = {    53,
  476.     61,  1402,  1402,    84,-32768,-32768,-32768,-32768,    36,    39,
  477.     42,    48,    54,-32768,-32768,-32768,-32768,   108,     7,   133,
  478. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    33,-32768,
  479.     68,-32768,    86,   149,  1196,-32768,-32768,   108,   175,-32768,
  480.    375,-32768,   240,-32768,-32768,-32768,   108,-32768,   636,   253,
  481. -32768,   838,-32768,   842,-32768,-32768,    41,-32768,-32768,-32768,
  482.   1263,  1276,-32768,-32768,-32768,  1330,-32768,-32768,   276,-32768,
  483. -32768,  1330,   117,   118,-32768,-32768,  1464,   899,   178,    22,
  484. -32768,   177,   340,   303,   318,-32768,   240,-32768,   181,-32768,
  485.    252,   515,   217,-32768,-32768,   240,   184,-32768,   881,   245,
  486.    269,   190,   730,   636,-32768,-32768,-32768,-32768,-32768,   230,
  487.    206,-32768,   253,-32768,-32768,-32768,-32768,   214,   632,-32768,
  488. -32768,-32768,-32768,   234,   276,-32768,   276,-32768,-32768,   221,
  489.    237,   251,   281,-32768,-32768,  1330,  1330,  1330,  1330,  1330,
  490.   1330,  1330,  1330,  1330,  1330,  1330,  1330,  1330,  1330,  1330,
  491.   1330,  1330,  1330,-32768,-32768,   253,   253,  1330,  1330,-32768,
  492.     22,   896,-32768,   322,   358,-32768,-32768,-32768,-32768,-32768,
  493.    269,-32768,-32768,   323,   149,-32768,   698,-32768,   297,   325,
  494. -32768,   575,   486,   326,  1284,-32768,   335,   365,    45,   337,
  495. -32768,   240,-32768,   515,   217,-32768,   919,-32768,-32768,   515,
  496.   1330,   253,   353,   206,   314,-32768,   314,  1339,  1343,-32768,
  497.    347,   362,-32768,-32768,   363,   367,  1135,  1464,  1464,  1464,
  498. -32768,   395,  1398,  1492,  1503,  1513,   438,   873,   817,   719,
  499.    719,   380,   380,-32768,-32768,-32768,-32768,-32768,   382,   118,
  500.    376,   220,   389,-32768,   328,-32768,   378,-32768,   964,-32768,
  501.    358,    47,   390,-32768,   218,  1419,-32768,   392,   388,-32768,
  502.      9,-32768,-32768,    26,-32768,-32768,-32768,   240,-32768,   108,
  503.    397,-32768,   245,-32768,-32768,-32768,   421,-32768,-32768,   391,
  504. -32768,  1464,-32768,-32768,   401,  1330,   235,   399,-32768,   399,
  505. -32768,-32768,-32768,-32768,-32768,   547,-32768,   829,-32768,  1330,
  506. -32768,-32768,   322,-32768,   407,-32768,   408,-32768,-32768,-32768,
  507.    405,-32768,-32768,-32768,-32768,   122,   345,   269,-32768,-32768,
  508.    269,-32768,-32768,   404,-32768,   465,   251,-32768,-32768,   192,
  509.    209,    27,   467,   829,    26,-32768,-32768,    26,-32768,  1464,
  510.   1330,-32768,   314,   250,   442,   454,   441,-32768,-32768,   462,
  511.    463,  1330,   489,   466,   468,  1209,   253,   526,-32768,   500,
  512.    477,  1049,   608,-32768,   522,-32768,-32768,   412,  1464,-32768,
  513.    478,  1480,-32768,-32768,-32768,   110,-32768,   987,    77,-32768,
  514. -32768,-32768,-32768,-32768,-32768,   484,    31,-32768,-32768,-32768,
  515.    829,-32768,  1446,-32768,-32768,  1330,   487,  1110,  1330,  1330,
  516.    523,-32768,-32768,-32768,-32768,   505,   519,-32768,   528,-32768,
  517. -32768,   669,   525,-32768,-32768,-32768,-32768,-32768,   120,   745,
  518.    531,   345,-32768,-32768,   521,   152,   537,   467,-32768,-32768,
  519.    538,  1330,   579,   541,   543,-32768,  1110,-32768,-32768,   149,
  520.   1110,-32768,  1110,-32768,   768,-32768,-32768,-32768,   544,   105,
  521. -32768,-32768,-32768,   549,-32768,-32768,-32768,  1110,-32768,   236,
  522. -32768,-32768,-32768,-32768,-32768,  1110,-32768,   558,  1330,  1110,
  523. -32768,   595,   556,-32768,  1110,  1330,   557,-32768,   563,    13,
  524.    559,-32768,-32768,-32768,   565,-32768,  1330,   595,   562,   595,
  525.    566,  1330,   583,    17,-32768,-32768,-32768,   594,-32768,   149,
  526.    597,-32768,   178,   114,-32768,  1110,   598,   149,-32768,-32768,
  527.    178,   657,   661,-32768
  528. };
  529.  
  530. static const short yypgoto[] = {-32768,
  531. -32768,-32768,-32768,   659,-32768,-32768,-32768,-32768,-32768,-32768,
  532. -32768,-32768,    -6,-32768,   -33,-32768,   506,   373,   -47,    57,
  533. -32768,-32768,   -34,  -131,   369,    40,  -145,     4,   626,     6,
  534.    -19,   507,     3,  -139,   411,   -30,   -77,   -72,-32768,-32768,
  535. -32768,  -179,-32768,   248,  -310,   313,   -32,   -62,   306,   -17,
  536.    -31,-32768,-32768,-32768,-32768,-32768,   479,    -4,-32768,   490,
  537.    342,   587,   504,   -40,   -70,    10,   -85,  -147,   354,-32768,
  538.   -171,-32768,  -107,  -112,-32768,-32768,  -322,-32768,-32768,-32768,
  539. -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
  540.   -368,   219,-32768,   227,-32768,   461,-32768,  -164,-32768,-32768,
  541. -32768,   473,-32768,   398,   295
  542. };
  543.  
  544.  
  545. #define    YYLAST        1561
  546.  
  547.  
  548. static const short yytable[] = {    57,
  549.     41,    73,    29,    31,    33,    19,    19,    20,    20,   189,
  550.     99,   266,   169,   243,   173,   277,   102,   109,   129,   216,
  551.     85,   195,    48,   389,   134,   250,   327,    54,   133,   103,
  552.    434,   278,   117,   190,   117,   131,   265,    81,    26,    27,
  553.    416,    26,    27,   110,    26,    27,   488,    36,    94,   123,
  554.    500,   170,    -1,    89,    81,   123,    81,   179,    43,    47,
  555.     -2,   119,   276,   119,    42,   325,   171,   160,   281,   489,
  556.    326,    81,   109,   501,   242,   433,   161,   162,    85,    36,
  557.    429,    90,    91,   170,   211,   168,   212,   427,   215,   416,
  558.     95,   131,   428,   131,   303,    51,   195,   124,    28,    96,
  559.    477,    30,    34,   312,    32,   221,   110,   342,    35,   446,
  560.     36,   250,    36,   314,   459,   208,   170,   209,   461,   275,
  561.    462,   168,   320,   498,    36,   241,   273,    81,   247,    81,
  562.     53,   316,   162,   109,   446,   471,     5,    44,     7,    45,
  563.    252,    24,    25,   474,     9,    10,    11,   478,    55,   237,
  564.    238,   329,   484,    37,   254,   315,   205,    56,   207,   449,
  565.     13,   465,    38,   280,   316,   162,   326,   320,   243,   299,
  566.    507,   171,   287,   135,   287,   508,   316,   162,   444,   136,
  567.    255,   445,   256,   509,   319,   322,   123,    48,   117,   117,
  568.     46,   415,   218,   219,   220,   110,   223,   224,   225,   226,
  569.    227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
  570.     81,    81,   423,   430,   383,   311,   265,   119,   119,   109,
  571.     36,   314,   329,   268,   270,   329,   170,   390,   303,   376,
  572.    392,   303,    86,   166,   379,   175,    87,   318,   321,   331,
  573.    415,   191,    36,    94,   123,   192,   187,   198,   255,   384,
  574.    256,    87,   332,   192,    58,    26,    27,   282,    48,    60,
  575.     56,   201,    61,   315,   187,   160,   385,   202,   341,   472,
  576.     87,   206,   316,   162,   161,   162,   130,   213,    58,     5,
  577.     62,     7,    59,    60,    56,    95,    61,     9,    10,    11,
  578.     63,   210,   473,   214,    96,    64,    65,    66,    85,   196,
  579.    197,    67,    68,    13,    62,    36,    69,   263,   395,   170,
  580.    287,    70,    71,   215,    63,   178,    36,    94,   401,    64,
  581.     65,    66,   406,    90,    91,    67,    68,   255,   305,   256,
  582.     69,     5,     6,     7,     8,    70,    71,   217,   -77,     9,
  583.     10,    11,   340,     5,   425,     7,   167,   286,    37,    89,
  584.    407,     9,    10,    11,   369,    13,   372,    38,   171,    95,
  585.    262,   171,   431,   106,   107,   221,   435,    13,    96,     9,
  586.     10,    11,    90,    91,   172,    88,   248,   249,   -26,   -26,
  587.    -26,   -26,   263,   267,  -282,   160,   -26,   -26,   -26,   271,
  588.    369,   196,   197,   274,   161,   162,   272,   393,   454,   377,
  589.    378,    89,   -26,   293,  -123,   460,  -123,     5,     6,     7,
  590.      8,   284,   367,   380,    58,     9,    10,    11,   294,    60,
  591.     56,   295,    61,   297,   369,   151,   152,   153,   300,    90,
  592.     91,    13,  -123,   126,   128,   221,  -123,   -26,   301,   302,
  593.     62,   308,   485,   248,   249,   304,   313,   369,   323,   324,
  594.     63,   333,   336,   493,   337,    64,    65,    66,   221,   339,
  595.    343,    67,    68,   373,   374,   503,    69,   382,   375,   386,
  596.    418,    70,    71,   511,   368,   -30,   369,   145,   146,   147,
  597.    148,   149,   150,   151,   152,   153,   180,   -31,   -89,   -89,
  598.    -89,   -89,   -89,   -89,   -89,   396,   -89,   -89,   -89,   -89,
  599.    -89,   369,   -89,   -89,   -89,   -89,   -89,   -89,   -89,   -89,
  600.    -89,   -89,   -89,   -89,   -89,   180,   399,   400,     5,     6,
  601.      7,     8,   402,   403,   -89,   404,     9,    10,    11,   -89,
  602.    -89,   -89,   408,   410,   411,   -89,   -89,   417,   426,   420,
  603.    -89,   432,    13,   -89,   -89,   -89,   -89,   344,   -89,   345,
  604.    346,     6,     7,     8,    60,    56,   436,    61,     9,    10,
  605.     11,   347,   438,   348,   349,   350,   351,   352,   353,   354,
  606.    355,   356,   357,   358,    13,    62,   439,   -87,     5,     6,
  607.      7,     8,   440,   442,   448,    63,     9,    10,    11,   447,
  608.     64,    65,    66,   451,   453,   455,    67,    68,   456,   457,
  609.    464,    69,    13,   479,   359,   467,    70,    71,   180,   215,
  610.    345,    27,   476,   483,   486,    60,    56,   487,    61,   495,
  611.    490,   491,   347,   497,   348,   349,   350,   351,   352,   353,
  612.    354,   355,   356,   357,   358,     5,    62,     7,   167,   499,
  613.    105,   106,   107,     9,    10,    11,    63,     9,    10,    11,
  614.    502,    64,    65,    66,   505,   510,   513,    67,    68,    13,
  615.    514,    23,    69,   240,   362,   359,   414,    70,    71,   180,
  616.    215,   345,    27,   104,   251,   452,    60,    56,   330,    61,
  617.    419,   422,   285,   347,   394,   348,   349,   350,   351,   352,
  618.    353,   354,   355,   356,   357,   358,   290,    62,   253,   204,
  619.    254,     5,     6,     7,     8,   283,   494,    63,   309,     9,
  620.     10,    11,    64,    65,    66,   412,   496,   307,    67,    68,
  621.    450,   381,     0,    69,     0,    13,   359,  -218,    70,    71,
  622.    199,   215,     0,   -22,   -22,   -22,   -22,     0,     0,     0,
  623.      0,   -22,   -22,   -22,     0,   367,     0,    58,     0,     0,
  624.      0,     0,    60,    56,  -282,    61,    89,   -22,     0,  -123,
  625.      0,  -123,   149,   150,   151,   152,   153,     0,   367,     0,
  626.     58,     0,     0,    62,     0,    60,    56,     0,    61,     0,
  627.      0,     0,     0,    63,    90,    91,     0,  -123,    64,    65,
  628.     66,  -123,   -22,     0,    67,    68,    62,     0,     0,    69,
  629.      0,     0,     0,  -178,    70,    71,    63,   368,     0,     0,
  630.      0,    64,    65,    66,     0,     0,     0,    67,    68,     0,
  631.      0,     0,    69,     0,     0,     0,   463,    70,    71,   367,
  632.    368,    58,     0,     0,     0,     0,    60,    56,   114,    61,
  633.      0,     5,   114,     7,    59,     5,     0,     7,    59,     9,
  634.     10,    11,     0,     9,    10,    11,     0,    62,   147,   148,
  635.    149,   150,   151,   152,   153,    13,     0,    63,     0,    13,
  636.      0,     0,    64,    65,    66,     0,     0,     0,    67,    68,
  637.      0,   193,     0,    69,   -18,   -18,   -18,   -18,    70,    71,
  638.      0,   368,   -18,   -18,   -18,   115,   116,     0,    58,   115,
  639.    121,     0,     0,    60,    56,     0,    61,    89,   -18,     0,
  640.   -123,     0,  -123,   146,   147,   148,   149,   150,   151,   152,
  641.    153,    58,     0,     0,    62,     0,    60,    56,     0,    61,
  642.      0,     0,     0,     0,    63,     0,     0,     0,  -123,    64,
  643.     65,    66,  -123,   -18,     0,    67,    68,    62,   154,   155,
  644.     69,   156,   157,   158,   159,    70,    71,    63,     0,   246,
  645.      0,     0,    64,    65,    66,     0,    58,     0,    67,    68,
  646.      0,    60,    56,    69,    61,     0,     0,     0,    70,    71,
  647.      0,     0,   279,     0,     0,     0,     0,     0,     0,    58,
  648.      0,     0,    62,     0,    60,    56,     0,    61,     0,     0,
  649.      0,     0,    63,     0,     0,     0,     0,    64,    65,    66,
  650.      0,     0,     0,    67,    68,    62,     0,     0,    69,     0,
  651.      0,     0,     0,    70,    71,    63,     0,   310,     0,     0,
  652.     64,    65,    66,     0,     0,     0,    67,    68,     0,     0,
  653.      0,    69,     0,     0,     0,     0,    70,    71,     0,     0,
  654.    424,   345,   346,     6,     7,     8,    60,    56,     0,    61,
  655.      9,    10,    11,   347,     0,   348,   349,   350,   351,   352,
  656.    353,   354,   355,   356,   357,   358,    13,    62,     0,     0,
  657.      0,     0,     0,     0,     0,     0,     0,    63,     0,     0,
  658.      0,     0,    64,    65,    66,     0,     0,     0,    67,    68,
  659.      0,     0,     0,    69,     0,     0,   359,     0,    70,    71,
  660.      0,   215,   345,    27,     0,     0,     0,    60,    56,     0,
  661.     61,     0,     0,     0,   347,     0,   348,   349,   350,   351,
  662.    352,   353,   354,   355,   356,   357,   358,    58,    62,     0,
  663.      0,     0,    60,    56,     0,    61,     0,     0,    63,     0,
  664.      0,     0,     0,    64,    65,    66,     0,     0,     0,    67,
  665.     68,     0,     0,    62,    69,     0,     0,   359,     0,    70,
  666.     71,     0,   215,    63,     0,     0,     0,     0,    64,    65,
  667.     66,     0,     0,     0,    67,    68,     0,     0,     0,    69,
  668.      0,     0,     0,     0,    70,    71,     0,   298,    58,     5,
  669.      0,     7,    59,    60,    56,     0,    61,     9,    10,    11,
  670.      0,    58,     0,     0,     0,     0,    60,    56,     0,    61,
  671.      0,     0,     0,    13,    62,     0,     0,     0,     0,     0,
  672.      0,     0,     0,     0,    63,     0,     0,    62,     0,    64,
  673.     65,    66,     0,     0,     0,    67,    68,    63,     0,     0,
  674.     69,     0,    64,    65,    66,    70,    71,     0,    67,    68,
  675.      0,     0,     0,    69,     0,    58,   405,     0,    70,    71,
  676.     60,    56,     0,    61,     0,     0,     0,     0,    58,     0,
  677.      0,     0,     0,    60,    56,     0,    61,     5,    44,     7,
  678.     45,    62,     0,     0,     0,     9,    10,    11,     0,     0,
  679.      0,    63,     0,     0,    62,     0,    64,    65,    66,     0,
  680.      0,    13,    67,    68,    63,     0,     0,   125,     0,    64,
  681.     65,    66,    70,    71,     0,    67,    68,     0,     0,     0,
  682.    127,     0,    58,     0,     0,    70,    71,    60,    56,   114,
  683.     61,   269,     5,   114,     7,    59,     5,     0,     7,    59,
  684.      9,    10,    11,     0,     9,    10,    11,     0,    62,     0,
  685.      0,     0,     0,     0,     0,     0,    13,     0,    63,     0,
  686.     13,     0,     0,    64,    65,    66,     0,     0,     0,    67,
  687.     68,     0,     0,     0,    69,     0,     0,     0,     0,    70,
  688.     71,     0,     0,     0,     0,     0,   115,   291,     0,     0,
  689.    115,   292,     4,     0,   -93,     5,     6,     7,     8,     0,
  690.      0,     0,     0,     9,    10,    11,     0,     0,     0,     0,
  691.      0,    36,     5,    44,     7,    45,     0,     0,    12,    13,
  692.      9,    10,    11,   141,   142,   143,   144,   145,   146,   147,
  693.    148,   149,   150,   151,   152,   153,    13,   -93,     0,     0,
  694.      0,     0,     0,     0,     0,     0,   -93,     0,     0,    14,
  695.      0,     0,     0,     0,   320,     0,     0,     0,     0,     0,
  696.      0,     0,     0,   316,   162,   187,   137,   138,   139,     0,
  697.    140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
  698.    150,   151,   152,   153,   137,   138,   139,     0,   140,   141,
  699.    142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
  700.    152,   153,   139,     0,   140,   141,   142,   143,   144,   145,
  701.    146,   147,   148,   149,   150,   151,   152,   153,   142,   143,
  702.    144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
  703.    143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
  704.    153,   144,   145,   146,   147,   148,   149,   150,   151,   152,
  705.    153
  706. };
  707.  
  708. static const short yycheck[] = {    34,
  709.     18,    35,     9,    10,    11,     2,     3,     2,     3,    95,
  710.     43,   183,    83,   161,    87,   195,    47,    49,    66,   132,
  711.     38,    99,    20,   334,    72,   165,     1,    32,    69,    47,
  712.    399,   196,    52,    96,    54,    69,   182,    35,     3,     4,
  713.    363,     3,     4,    50,     3,     4,    34,     3,     4,     9,
  714.     34,     7,     0,    27,    52,     9,    54,    91,    19,    20,
  715.      0,    52,   194,    54,    58,    57,    84,    46,   200,    57,
  716.     62,    69,   104,    57,   160,   398,    55,    56,    96,     3,
  717.    391,    55,    56,     7,   125,    83,   127,    57,    63,   412,
  718.     46,   125,    62,   127,   242,    63,   174,    57,    63,    55,
  719.    469,    63,    55,    57,    63,   139,   113,   287,    55,   420,
  720.      3,   251,     3,     4,   437,   120,     7,   122,   441,   192,
  721.    443,   119,    46,   492,     3,   159,   189,   125,   162,   127,
  722.     63,    55,    56,   165,   445,   458,     4,     5,     6,     7,
  723.    175,    58,    59,   466,    12,    13,    14,   470,    63,   156,
  724.    157,   264,   475,    46,     3,    46,   117,     9,   119,     8,
  725.     28,    57,    55,   197,    55,    56,    62,    46,   316,   217,
  726.     57,   189,   205,    57,   207,    62,    55,    56,    59,    62,
  727.    177,    62,   177,   506,   255,   256,     9,   185,   208,   209,
  728.     58,   363,   136,   137,   138,   202,   140,   141,   142,   143,
  729.    144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
  730.    208,   209,   377,   393,   327,   249,   362,   208,   209,   251,
  731.      3,     4,   335,   184,   185,   338,     7,   335,   376,   315,
  732.    338,   379,    58,    57,   320,    55,    62,   255,   256,   270,
  733.    412,    58,     3,     4,     9,    62,    30,    58,   245,    58,
  734.    245,    62,   270,    62,     3,     3,     4,   201,   256,     8,
  735.      9,    32,    11,    46,    30,    46,    58,    62,    34,    34,
  736.     62,    58,    55,    56,    55,    56,     1,    57,     3,     4,
  737.     29,     6,     7,     8,     9,    46,    11,    12,    13,    14,
  738.     39,    58,    57,    57,    55,    44,    45,    46,   316,    55,
  739.     56,    50,    51,    28,    29,     3,    55,    58,    59,     7,
  740.    343,    60,    61,    63,    39,    64,     3,     4,   352,    44,
  741.     45,    46,   356,    55,    56,    50,    51,   324,     1,   324,
  742.     55,     4,     5,     6,     7,    60,    61,    57,    63,    12,
  743.     13,    14,   286,     4,   378,     6,     7,    34,    46,    27,
  744.    357,    12,    13,    14,   298,    28,   300,    55,   376,    46,
  745.     64,   379,   396,     6,     7,   399,   400,    28,    55,    12,
  746.     13,    14,    55,    56,    57,     1,    55,    56,     4,     5,
  747.      6,     7,    58,    58,    57,    46,    12,    13,    14,    55,
  748.    334,    55,    56,    57,    55,    56,    32,   341,   432,    55,
  749.     56,    27,    28,    57,    30,   440,    32,     4,     5,     6,
  750.      7,    59,     1,    10,     3,    12,    13,    14,    57,     8,
  751.      9,    59,    11,    57,   368,    46,    47,    48,    34,    55,
  752.     56,    28,    58,    61,    62,   469,    62,    63,    57,    64,
  753.     29,    64,   476,    55,    56,    57,    57,   391,    57,    62,
  754.     39,    55,    32,   487,    64,    44,    45,    46,   492,    59,
  755.     62,    50,    51,    57,    57,   500,    55,     3,    64,     3,
  756.     59,    60,    61,   508,    63,    34,   420,    40,    41,    42,
  757.     43,    44,    45,    46,    47,    48,     1,    34,     3,     4,
  758.      5,     6,     7,     8,     9,    55,    11,    12,    13,    14,
  759.     15,   445,    17,    18,    19,    20,    21,    22,    23,    24,
  760.     25,    26,    27,    28,    29,     1,    55,    55,     4,     5,
  761.      6,     7,    34,    58,    39,    58,    12,    13,    14,    44,
  762.     45,    46,     7,    34,    58,    50,    51,    16,    55,    62,
  763.     55,    55,    28,    58,    59,    60,    61,     1,    63,     3,
  764.      4,     5,     6,     7,     8,     9,    34,    11,    12,    13,
  765.     14,    15,    58,    17,    18,    19,    20,    21,    22,    23,
  766.     24,    25,    26,    27,    28,    29,    58,    63,     4,     5,
  767.      6,     7,    55,    59,    64,    39,    12,    13,    14,    59,
  768.     44,    45,    46,    57,    57,    17,    50,    51,    58,    57,
  769.     57,    55,    28,     9,    58,    57,    60,    61,     1,    63,
  770.      3,     4,    55,    58,    58,     8,     9,    55,    11,    58,
  771.     62,    57,    15,    58,    17,    18,    19,    20,    21,    22,
  772.     23,    24,    25,    26,    27,     4,    29,     6,     7,    57,
  773.      5,     6,     7,    12,    13,    14,    39,    12,    13,    14,
  774.     57,    44,    45,    46,    58,    58,     0,    50,    51,    28,
  775.      0,     3,    55,   158,   296,    58,    59,    60,    61,     1,
  776.     63,     3,     4,    48,   168,   428,     8,     9,   268,    11,
  777.    368,   376,   204,    15,   343,    17,    18,    19,    20,    21,
  778.     22,    23,    24,    25,    26,    27,   207,    29,     1,   113,
  779.      3,     4,     5,     6,     7,   202,   488,    39,   248,    12,
  780.     13,    14,    44,    45,    46,   362,   490,   245,    50,    51,
  781.    426,   324,    -1,    55,    -1,    28,    58,    59,    60,    61,
  782.      1,    63,    -1,     4,     5,     6,     7,    -1,    -1,    -1,
  783.     -1,    12,    13,    14,    -1,     1,    -1,     3,    -1,    -1,
  784.     -1,    -1,     8,     9,    57,    11,    27,    28,    -1,    30,
  785.     -1,    32,    44,    45,    46,    47,    48,    -1,     1,    -1,
  786.      3,    -1,    -1,    29,    -1,     8,     9,    -1,    11,    -1,
  787.     -1,    -1,    -1,    39,    55,    56,    -1,    58,    44,    45,
  788.     46,    62,    63,    -1,    50,    51,    29,    -1,    -1,    55,
  789.     -1,    -1,    -1,    59,    60,    61,    39,    63,    -1,    -1,
  790.     -1,    44,    45,    46,    -1,    -1,    -1,    50,    51,    -1,
  791.     -1,    -1,    55,    -1,    -1,    -1,    59,    60,    61,     1,
  792.     63,     3,    -1,    -1,    -1,    -1,     8,     9,     1,    11,
  793.     -1,     4,     1,     6,     7,     4,    -1,     6,     7,    12,
  794.     13,    14,    -1,    12,    13,    14,    -1,    29,    42,    43,
  795.     44,    45,    46,    47,    48,    28,    -1,    39,    -1,    28,
  796.     -1,    -1,    44,    45,    46,    -1,    -1,    -1,    50,    51,
  797.     -1,     1,    -1,    55,     4,     5,     6,     7,    60,    61,
  798.     -1,    63,    12,    13,    14,    58,    59,    -1,     3,    58,
  799.     59,    -1,    -1,     8,     9,    -1,    11,    27,    28,    -1,
  800.     30,    -1,    32,    41,    42,    43,    44,    45,    46,    47,
  801.     48,     3,    -1,    -1,    29,    -1,     8,     9,    -1,    11,
  802.     -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    58,    44,
  803.     45,    46,    62,    63,    -1,    50,    51,    29,    50,    51,
  804.     55,    53,    54,    55,    56,    60,    61,    39,    -1,    64,
  805.     -1,    -1,    44,    45,    46,    -1,     3,    -1,    50,    51,
  806.     -1,     8,     9,    55,    11,    -1,    -1,    -1,    60,    61,
  807.     -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,    -1,     3,
  808.     -1,    -1,    29,    -1,     8,     9,    -1,    11,    -1,    -1,
  809.     -1,    -1,    39,    -1,    -1,    -1,    -1,    44,    45,    46,
  810.     -1,    -1,    -1,    50,    51,    29,    -1,    -1,    55,    -1,
  811.     -1,    -1,    -1,    60,    61,    39,    -1,    64,    -1,    -1,
  812.     44,    45,    46,    -1,    -1,    -1,    50,    51,    -1,    -1,
  813.     -1,    55,    -1,    -1,    -1,    -1,    60,    61,    -1,    -1,
  814.     64,     3,     4,     5,     6,     7,     8,     9,    -1,    11,
  815.     12,    13,    14,    15,    -1,    17,    18,    19,    20,    21,
  816.     22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
  817.     -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
  818.     -1,    -1,    44,    45,    46,    -1,    -1,    -1,    50,    51,
  819.     -1,    -1,    -1,    55,    -1,    -1,    58,    -1,    60,    61,
  820.     -1,    63,     3,     4,    -1,    -1,    -1,     8,     9,    -1,
  821.     11,    -1,    -1,    -1,    15,    -1,    17,    18,    19,    20,
  822.     21,    22,    23,    24,    25,    26,    27,     3,    29,    -1,
  823.     -1,    -1,     8,     9,    -1,    11,    -1,    -1,    39,    -1,
  824.     -1,    -1,    -1,    44,    45,    46,    -1,    -1,    -1,    50,
  825.     51,    -1,    -1,    29,    55,    -1,    -1,    58,    -1,    60,
  826.     61,    -1,    63,    39,    -1,    -1,    -1,    -1,    44,    45,
  827.     46,    -1,    -1,    -1,    50,    51,    -1,    -1,    -1,    55,
  828.     -1,    -1,    -1,    -1,    60,    61,    -1,    63,     3,     4,
  829.     -1,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
  830.     -1,     3,    -1,    -1,    -1,    -1,     8,     9,    -1,    11,
  831.     -1,    -1,    -1,    28,    29,    -1,    -1,    -1,    -1,    -1,
  832.     -1,    -1,    -1,    -1,    39,    -1,    -1,    29,    -1,    44,
  833.     45,    46,    -1,    -1,    -1,    50,    51,    39,    -1,    -1,
  834.     55,    -1,    44,    45,    46,    60,    61,    -1,    50,    51,
  835.     -1,    -1,    -1,    55,    -1,     3,    58,    -1,    60,    61,
  836.      8,     9,    -1,    11,    -1,    -1,    -1,    -1,     3,    -1,
  837.     -1,    -1,    -1,     8,     9,    -1,    11,     4,     5,     6,
  838.      7,    29,    -1,    -1,    -1,    12,    13,    14,    -1,    -1,
  839.     -1,    39,    -1,    -1,    29,    -1,    44,    45,    46,    -1,
  840.     -1,    28,    50,    51,    39,    -1,    -1,    55,    -1,    44,
  841.     45,    46,    60,    61,    -1,    50,    51,    -1,    -1,    -1,
  842.     55,    -1,     3,    -1,    -1,    60,    61,     8,     9,     1,
  843.     11,    58,     4,     1,     6,     7,     4,    -1,     6,     7,
  844.     12,    13,    14,    -1,    12,    13,    14,    -1,    29,    -1,
  845.     -1,    -1,    -1,    -1,    -1,    -1,    28,    -1,    39,    -1,
  846.     28,    -1,    -1,    44,    45,    46,    -1,    -1,    -1,    50,
  847.     51,    -1,    -1,    -1,    55,    -1,    -1,    -1,    -1,    60,
  848.     61,    -1,    -1,    -1,    -1,    -1,    58,    59,    -1,    -1,
  849.     58,    59,     1,    -1,     3,     4,     5,     6,     7,    -1,
  850.     -1,    -1,    -1,    12,    13,    14,    -1,    -1,    -1,    -1,
  851.     -1,     3,     4,     5,     6,     7,    -1,    -1,    27,    28,
  852.     12,    13,    14,    36,    37,    38,    39,    40,    41,    42,
  853.     43,    44,    45,    46,    47,    48,    28,    46,    -1,    -1,
  854.     -1,    -1,    -1,    -1,    -1,    -1,    55,    -1,    -1,    58,
  855.     -1,    -1,    -1,    -1,    46,    -1,    -1,    -1,    -1,    -1,
  856.     -1,    -1,    -1,    55,    56,    30,    31,    32,    33,    -1,
  857.     35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
  858.     45,    46,    47,    48,    31,    32,    33,    -1,    35,    36,
  859.     37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
  860.     47,    48,    33,    -1,    35,    36,    37,    38,    39,    40,
  861.     41,    42,    43,    44,    45,    46,    47,    48,    37,    38,
  862.     39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
  863.     38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
  864.     48,    39,    40,    41,    42,    43,    44,    45,    46,    47,
  865.     48
  866. };
  867. /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  868. #line 3 "bison.simple"
  869.  
  870. /* Skeleton output parser for bison,
  871.    Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
  872.  
  873.    This program is free software; you can redistribute it and/or modify
  874.    it under the terms of the GNU General Public License as published by
  875.    the Free Software Foundation; either version 1, or (at your option)
  876.    any later version.
  877.  
  878.    This program is distributed in the hope that it will be useful,
  879.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  880.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  881.    GNU General Public License for more details.
  882.  
  883.    You should have received a copy of the GNU General Public License
  884.    along with this program; if not, write to the Free Software
  885.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  886.  
  887.  
  888. #ifndef alloca
  889. #ifdef __GNUC__
  890. #define alloca __builtin_alloca
  891. #else /* Not GNU C.  */
  892. #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__)
  893. #include <alloca.h>
  894. #else /* Not sparc */
  895. #ifdef MSDOS
  896. #include <malloc.h>
  897. #endif /* MSDOS */
  898. #endif /* Not sparc.  */
  899. #endif /* Not GNU C.  */
  900. #endif /* alloca not defined.  */
  901.  
  902. /* This is the parser code that is written into each bison parser
  903.   when the %semantic_parser declaration is not specified in the grammar.
  904.   It was written by Richard Stallman by simplifying the hairy parser
  905.   used when %semantic_parser is specified.  */
  906.  
  907. /* Note: there must be only one dollar sign in this file.
  908.    It is replaced by the list of actions, each action
  909.    as one case of the switch.  */
  910.  
  911. #define yyerrok        (yyerrstatus = 0)
  912. #define yyclearin    (yychar = YYEMPTY)
  913. #define YYEMPTY        -2
  914. #define YYEOF        0
  915. #define YYACCEPT    return(0)
  916. #define YYABORT     return(1)
  917. #define YYERROR        goto yyerrlab1
  918. /* Like YYERROR except do call yyerror.
  919.    This remains here temporarily to ease the
  920.    transition to the new meaning of YYERROR, for GCC.
  921.    Once GCC version 2 has supplanted version 1, this can go.  */
  922. #define YYFAIL        goto yyerrlab
  923. #define YYRECOVERING()  (!!yyerrstatus)
  924. #define YYBACKUP(token, value) \
  925. do                                \
  926.   if (yychar == YYEMPTY && yylen == 1)                \
  927.     { yychar = (token), yylval = (value);            \
  928.       yychar1 = YYTRANSLATE (yychar);                \
  929.       YYPOPSTACK;                        \
  930.       goto yybackup;                        \
  931.     }                                \
  932.   else                                \
  933.     { yyerror ("syntax error: cannot back up"); YYERROR; }    \
  934. while (0)
  935.  
  936. #define YYTERROR    1
  937. #define YYERRCODE    256
  938.  
  939. #ifndef YYPURE
  940. #define YYLEX        yylex()
  941. #endif
  942.  
  943. #ifdef YYPURE
  944. #ifdef YYLSP_NEEDED
  945. #define YYLEX        yylex(&yylval, &yylloc)
  946. #else
  947. #define YYLEX        yylex(&yylval)
  948. #endif
  949. #endif
  950.  
  951. /* If nonreentrant, generate the variables here */
  952.  
  953. #ifndef YYPURE
  954.  
  955. int    yychar;            /*  the lookahead symbol        */
  956. YYSTYPE    yylval;            /*  the semantic value of the        */
  957.                 /*  lookahead symbol            */
  958.  
  959. #ifdef YYLSP_NEEDED
  960. YYLTYPE yylloc;            /*  location data for the lookahead    */
  961.                 /*  symbol                */
  962. #endif
  963.  
  964. int yynerrs;            /*  number of parse errors so far       */
  965. #endif  /* not YYPURE */
  966.  
  967. #if YYDEBUG != 0
  968. int yydebug;            /*  nonzero means print parse trace    */
  969. /* Since this is uninitialized, it does not stop multiple parsers
  970.    from coexisting.  */
  971. #endif
  972.  
  973. /*  YYINITDEPTH indicates the initial size of the parser's stacks    */
  974.  
  975. #ifndef    YYINITDEPTH
  976. #define YYINITDEPTH 200
  977. #endif
  978.  
  979. /*  YYMAXDEPTH is the maximum size the stacks can grow to
  980.     (effective only if the built-in stack extension method is used).  */
  981.  
  982. #if YYMAXDEPTH == 0
  983. #undef YYMAXDEPTH
  984. #endif
  985.  
  986. #ifndef YYMAXDEPTH
  987. #define YYMAXDEPTH 10000
  988. #endif
  989.  
  990. #ifndef __cplusplus
  991.  
  992. /* This is the most reliable way to avoid incompatibilities
  993.    in available built-in functions on various systems.  */
  994. static void
  995. __yy_bcopy (from, to, count)
  996.      char *from;
  997.      char *to;
  998.      int count;
  999. {
  1000.   register char *f = from;
  1001.   register char *t = to;
  1002.   register int i = count;
  1003.  
  1004.   while (i-- > 0)
  1005.     *t++ = *f++;
  1006. }
  1007.  
  1008. #else /* __cplusplus */
  1009.  
  1010. /* This is the most reliable way to avoid incompatibilities
  1011.    in available built-in functions on various systems.  */
  1012. static void
  1013. __yy_bcopy (char *from, char *to, int count)
  1014. {
  1015.   register char *f = from;
  1016.   register char *t = to;
  1017.   register int i = count;
  1018.  
  1019.   while (i-- > 0)
  1020.     *t++ = *f++;
  1021. }
  1022.  
  1023. #endif
  1024.  
  1025. #line 160 "bison.simple"
  1026. int
  1027. yyparse()
  1028. {
  1029.   register int yystate;
  1030.   register int yyn;
  1031.   register short *yyssp;
  1032.   register YYSTYPE *yyvsp;
  1033.   int yyerrstatus;    /*  number of tokens to shift before error messages enabled */
  1034.   int yychar1;        /*  lookahead token as an internal (translated) token number */
  1035.  
  1036.   short    yyssa[YYINITDEPTH];    /*  the state stack            */
  1037.   YYSTYPE yyvsa[YYINITDEPTH];    /*  the semantic value stack        */
  1038.  
  1039.   short *yyss = yyssa;        /*  refer to the stacks thru separate pointers */
  1040.   YYSTYPE *yyvs = yyvsa;    /*  to allow yyoverflow to reallocate them elsewhere */
  1041.  
  1042. #ifdef YYLSP_NEEDED
  1043.   YYLTYPE yylsa[YYINITDEPTH];    /*  the location stack            */
  1044.   YYLTYPE *yyls = yylsa;
  1045.   YYLTYPE *yylsp;
  1046.  
  1047. #define YYPOPSTACK   (yyvsp--, yysp--, yylsp--)
  1048. #else
  1049. #define YYPOPSTACK   (yyvsp--, yysp--)
  1050. #endif
  1051.  
  1052.   int yystacksize = YYINITDEPTH;
  1053.  
  1054. #ifdef YYPURE
  1055.   int yychar;
  1056.   YYSTYPE yylval;
  1057.   int yynerrs;
  1058. #ifdef YYLSP_NEEDED
  1059.   YYLTYPE yylloc;
  1060. #endif
  1061. #endif
  1062.  
  1063.   YYSTYPE yyval;        /*  the variable used to return        */
  1064.                 /*  semantic values from the action    */
  1065.                 /*  routines                */
  1066.  
  1067.   int yylen;
  1068.  
  1069. #if YYDEBUG != 0
  1070.   if (yydebug)
  1071.     fprintf(stderr, "Starting parse\n");
  1072. #endif
  1073.  
  1074.   yystate = 0;
  1075.   yyerrstatus = 0;
  1076.   yynerrs = 0;
  1077.   yychar = YYEMPTY;        /* Cause a token to be read.  */
  1078.  
  1079.   /* Initialize stack pointers.
  1080.      Waste one element of value and location stack
  1081.      so that they stay on the same level as the state stack.  */
  1082.  
  1083.   yyssp = yyss - 1;
  1084.   yyvsp = yyvs;
  1085. #ifdef YYLSP_NEEDED
  1086.   yylsp = yyls;
  1087. #endif
  1088.  
  1089. /* Push a new state, which is found in  yystate  .  */
  1090. /* In all cases, when you get here, the value and location stacks
  1091.    have just been pushed. so pushing a state here evens the stacks.  */
  1092. yynewstate:
  1093.  
  1094.   *++yyssp = yystate;
  1095.  
  1096.   if (yyssp >= yyss + yystacksize - 1)
  1097.     {
  1098.       /* Give user a chance to reallocate the stack */
  1099.       /* Use copies of these so that the &'s don't force the real ones into memory. */
  1100.       YYSTYPE *yyvs1 = yyvs;
  1101.       short *yyss1 = yyss;
  1102. #ifdef YYLSP_NEEDED
  1103.       YYLTYPE *yyls1 = yyls;
  1104. #endif
  1105.  
  1106.       /* Get the current used size of the three stacks, in elements.  */
  1107.       int size = yyssp - yyss + 1;
  1108.  
  1109. #ifdef yyoverflow
  1110.       /* Each stack pointer address is followed by the size of
  1111.      the data in use in that stack, in bytes.  */
  1112.       yyoverflow("parser stack overflow",
  1113.          &yyss1, size * sizeof (*yyssp),
  1114.          &yyvs1, size * sizeof (*yyvsp),
  1115. #ifdef YYLSP_NEEDED
  1116.          &yyls1, size * sizeof (*yylsp),
  1117. #endif
  1118.          &yystacksize);
  1119.  
  1120.       yyss = yyss1; yyvs = yyvs1;
  1121. #ifdef YYLSP_NEEDED
  1122.       yyls = yyls1;
  1123. #endif
  1124. #else /* no yyoverflow */
  1125.       /* Extend the stack our own way.  */
  1126.       if (yystacksize >= YYMAXDEPTH)
  1127.     {
  1128.       yyerror("parser stack overflow");
  1129.       return 2;
  1130.     }
  1131.       yystacksize *= 2;
  1132.       if (yystacksize > YYMAXDEPTH)
  1133.     yystacksize = YYMAXDEPTH;
  1134.       yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
  1135.       __yy_bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
  1136.       yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
  1137.       __yy_bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
  1138. #ifdef YYLSP_NEEDED
  1139.       yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
  1140.       __yy_bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
  1141. #endif
  1142. #endif /* no yyoverflow */
  1143.  
  1144.       yyssp = yyss + size - 1;
  1145.       yyvsp = yyvs + size - 1;
  1146. #ifdef YYLSP_NEEDED
  1147.       yylsp = yyls + size - 1;
  1148. #endif
  1149.  
  1150. #if YYDEBUG != 0
  1151.       if (yydebug)
  1152.     fprintf(stderr, "Stack size increased to %d\n", yystacksize);
  1153. #endif
  1154.  
  1155.       if (yyssp >= yyss + yystacksize - 1)
  1156.     YYABORT;
  1157.     }
  1158.  
  1159. #if YYDEBUG != 0
  1160.   if (yydebug)
  1161.     fprintf(stderr, "Entering state %d\n", yystate);
  1162. #endif
  1163.  
  1164.  yybackup:
  1165.  
  1166. /* Do appropriate processing given the current state.  */
  1167. /* Read a lookahead token if we need one and don't already have one.  */
  1168. /* yyresume: */
  1169.  
  1170.   /* First try to decide what to do without reference to lookahead token.  */
  1171.  
  1172.   yyn = yypact[yystate];
  1173.   if (yyn == YYFLAG)
  1174.     goto yydefault;
  1175.  
  1176.   /* Not known => get a lookahead token if don't already have one.  */
  1177.  
  1178.   /* yychar is either YYEMPTY or YYEOF
  1179.      or a valid token in external form.  */
  1180.  
  1181.   if (yychar == YYEMPTY)
  1182.     {
  1183. #if YYDEBUG != 0
  1184.       if (yydebug)
  1185.     fprintf(stderr, "Reading a token: ");
  1186. #endif
  1187.       yychar = YYLEX;
  1188.     }
  1189.  
  1190.   /* Convert token to internal form (in yychar1) for indexing tables with */
  1191.  
  1192.   if (yychar <= 0)        /* This means end of input. */
  1193.     {
  1194.       yychar1 = 0;
  1195.       yychar = YYEOF;        /* Don't call YYLEX any more */
  1196.  
  1197. #if YYDEBUG != 0
  1198.       if (yydebug)
  1199.     fprintf(stderr, "Now at end of input.\n");
  1200. #endif
  1201.     }
  1202.   else
  1203.     {
  1204.       yychar1 = YYTRANSLATE(yychar);
  1205.  
  1206. #if YYDEBUG != 0
  1207.       if (yydebug)
  1208.     fprintf(stderr, "Next token is %d (%s)\n", yychar, yytname[yychar1]);
  1209. #endif
  1210.     }
  1211.  
  1212.   yyn += yychar1;
  1213.   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
  1214.     goto yydefault;
  1215.  
  1216.   yyn = yytable[yyn];
  1217.  
  1218.   /* yyn is what to do for this token type in this state.
  1219.      Negative => reduce, -yyn is rule number.
  1220.      Positive => shift, yyn is new state.
  1221.        New state is final state => don't bother to shift,
  1222.        just return success.
  1223.      0, or most negative number => error.  */
  1224.  
  1225.   if (yyn < 0)
  1226.     {
  1227.       if (yyn == YYFLAG)
  1228.     goto yyerrlab;
  1229.       yyn = -yyn;
  1230.       goto yyreduce;
  1231.     }
  1232.   else if (yyn == 0)
  1233.     goto yyerrlab;
  1234.  
  1235.   if (yyn == YYFINAL)
  1236.     YYACCEPT;
  1237.  
  1238.   /* Shift the lookahead token.  */
  1239.  
  1240. #if YYDEBUG != 0
  1241.   if (yydebug)
  1242.     fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
  1243. #endif
  1244.  
  1245.   /* Discard the token being shifted unless it is eof.  */
  1246.   if (yychar != YYEOF)
  1247.     yychar = YYEMPTY;
  1248.  
  1249.   *++yyvsp = yylval;
  1250. #ifdef YYLSP_NEEDED
  1251.   *++yylsp = yylloc;
  1252. #endif
  1253.  
  1254.   /* count tokens shifted since error; after three, turn off error status.  */
  1255.   if (yyerrstatus) yyerrstatus--;
  1256.  
  1257.   yystate = yyn;
  1258.   goto yynewstate;
  1259.  
  1260. /* Do the default action for the current state.  */
  1261. yydefault:
  1262.  
  1263.   yyn = yydefact[yystate];
  1264.   if (yyn == 0)
  1265.     goto yyerrlab;
  1266.  
  1267. /* Do a reduction.  yyn is the number of a rule to reduce with.  */
  1268. yyreduce:
  1269.   yylen = yyr2[yyn];
  1270.   yyval = yyvsp[1-yylen]; /* implement default value of the action */
  1271.  
  1272. #if YYDEBUG != 0
  1273.   if (yydebug)
  1274.     {
  1275.       int i;
  1276.  
  1277.       fprintf (stderr, "Reducing via rule %d (line %d), ",
  1278.            yyn, yyrline[yyn]);
  1279.  
  1280.       /* Print the symboles being reduced, and their result.  */
  1281.       for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
  1282.     fprintf (stderr, "%s ", yytname[yyrhs[i]]);
  1283.       fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
  1284.     }
  1285. #endif
  1286.  
  1287.  
  1288.   switch (yyn) {
  1289.  
  1290. case 3:
  1291. #line 186 "./c-parse.y"
  1292. {yyval.ttype = NULL_TREE; ;
  1293.     break;}
  1294. case 5:
  1295. #line 187 "./c-parse.y"
  1296. {yyval.ttype = NULL_TREE; ;
  1297.     break;}
  1298. case 9:
  1299. #line 194 "./c-parse.y"
  1300. { if (pedantic)
  1301.             warning ("ANSI C forbids use of `asm' keyword");
  1302.           if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype);
  1303.           assemble_asm (yyvsp[-2].ttype); ;
  1304.     break;}
  1305. case 10:
  1306. #line 202 "./c-parse.y"
  1307. { if (pedantic)
  1308.             error ("ANSI C forbids data definition lacking type or storage class");
  1309.           else if (!flag_traditional)
  1310.             warning ("data definition lacks type or storage class"); ;
  1311.     break;}
  1312. case 11:
  1313. #line 207 "./c-parse.y"
  1314. {;
  1315.     break;}
  1316. case 12:
  1317. #line 209 "./c-parse.y"
  1318. {;
  1319.     break;}
  1320. case 13:
  1321. #line 211 "./c-parse.y"
  1322. { error ("empty declaration"); ;
  1323.     break;}
  1324. case 14:
  1325. #line 213 "./c-parse.y"
  1326. { shadow_tag (yyvsp[-1].ttype); ;
  1327.     break;}
  1328. case 17:
  1329. #line 217 "./c-parse.y"
  1330. { if (pedantic)
  1331.             warning ("ANSI C does not allow extra `;' outside of a function"); ;
  1332.     break;}
  1333. case 18:
  1334. #line 223 "./c-parse.y"
  1335. { if (! start_function (yyvsp[-2].ttype, yyvsp[0].ttype))
  1336.             YYERROR;
  1337.           reinit_parse_for_function (); ;
  1338.     break;}
  1339. case 19:
  1340. #line 227 "./c-parse.y"
  1341. { store_parm_decls (); ;
  1342.     break;}
  1343. case 20:
  1344. #line 229 "./c-parse.y"
  1345. { finish_function (lineno); ;
  1346.     break;}
  1347. case 21:
  1348. #line 231 "./c-parse.y"
  1349. { ;
  1350.     break;}
  1351. case 22:
  1352. #line 233 "./c-parse.y"
  1353. { if (! start_function (yyvsp[-2].ttype, yyvsp[0].ttype))
  1354.             YYERROR;
  1355.           reinit_parse_for_function (); ;
  1356.     break;}
  1357. case 23:
  1358. #line 237 "./c-parse.y"
  1359. { store_parm_decls (); ;
  1360.     break;}
  1361. case 24:
  1362. #line 239 "./c-parse.y"
  1363. { finish_function (lineno); ;
  1364.     break;}
  1365. case 25:
  1366. #line 241 "./c-parse.y"
  1367. { ;
  1368.     break;}
  1369. case 26:
  1370. #line 243 "./c-parse.y"
  1371. { if (! start_function (0, yyvsp[0].ttype))
  1372.             YYERROR;
  1373.           reinit_parse_for_function (); ;
  1374.     break;}
  1375. case 27:
  1376. #line 247 "./c-parse.y"
  1377. { store_parm_decls (); ;
  1378.     break;}
  1379. case 28:
  1380. #line 249 "./c-parse.y"
  1381. { finish_function (lineno); ;
  1382.     break;}
  1383. case 29:
  1384. #line 251 "./c-parse.y"
  1385. { ;
  1386.     break;}
  1387. case 32:
  1388. #line 260 "./c-parse.y"
  1389. { yyval.code = ADDR_EXPR; ;
  1390.     break;}
  1391. case 33:
  1392. #line 262 "./c-parse.y"
  1393. { yyval.code = NEGATE_EXPR; ;
  1394.     break;}
  1395. case 34:
  1396. #line 264 "./c-parse.y"
  1397. { yyval.code = CONVERT_EXPR; ;
  1398.     break;}
  1399. case 35:
  1400. #line 266 "./c-parse.y"
  1401. { yyval.code = PREINCREMENT_EXPR; ;
  1402.     break;}
  1403. case 36:
  1404. #line 268 "./c-parse.y"
  1405. { yyval.code = PREDECREMENT_EXPR; ;
  1406.     break;}
  1407. case 37:
  1408. #line 270 "./c-parse.y"
  1409. { yyval.code = BIT_NOT_EXPR; ;
  1410.     break;}
  1411. case 38:
  1412. #line 272 "./c-parse.y"
  1413. { yyval.code = TRUTH_NOT_EXPR; ;
  1414.     break;}
  1415. case 39:
  1416. #line 276 "./c-parse.y"
  1417. { yyval.ttype = build_compound_expr (yyvsp[0].ttype); ;
  1418.     break;}
  1419. case 40:
  1420. #line 281 "./c-parse.y"
  1421. { yyval.ttype = NULL_TREE; ;
  1422.     break;}
  1423. case 42:
  1424. #line 287 "./c-parse.y"
  1425. { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
  1426.     break;}
  1427. case 43:
  1428. #line 289 "./c-parse.y"
  1429. { chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
  1430.     break;}
  1431. case 45:
  1432. #line 295 "./c-parse.y"
  1433. { yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ;
  1434.     break;}
  1435. case 46:
  1436. #line 297 "./c-parse.y"
  1437. { yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0); ;
  1438.     break;}
  1439. case 47:
  1440. #line 299 "./c-parse.y"
  1441. { if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
  1442.               && TREE_PACKED (TREE_OPERAND (yyvsp[0].ttype, 1)))
  1443.             error ("`sizeof' applied to a bit-field");
  1444.           /* ANSI says arrays and functions are converted inside comma.
  1445.              But we can't really convert them in build_compound_expr
  1446.              because that would break commas in lvalues.
  1447.              So do the conversion here if operand was a comma.  */
  1448.           if (TREE_CODE (yyvsp[0].ttype) == COMPOUND_EXPR
  1449.               && (TREE_CODE (TREE_TYPE (yyvsp[0].ttype)) == ARRAY_TYPE
  1450.               || TREE_CODE (TREE_TYPE (yyvsp[0].ttype)) == FUNCTION_TYPE))
  1451.             yyvsp[0].ttype = default_conversion (yyvsp[0].ttype);
  1452.           yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ;
  1453.     break;}
  1454. case 48:
  1455. #line 312 "./c-parse.y"
  1456. { yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ;
  1457.     break;}
  1458. case 49:
  1459. #line 314 "./c-parse.y"
  1460. { if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
  1461.               && TREE_PACKED (TREE_OPERAND (yyvsp[0].ttype, 1)))
  1462.             error ("`__alignof' applied to a bit-field");
  1463.           if (TREE_CODE (yyvsp[0].ttype) == INDIRECT_REF)
  1464.             {
  1465.               tree t = TREE_OPERAND (yyvsp[0].ttype, 0);
  1466.               tree best = t;
  1467.               int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
  1468.               while (TREE_CODE (t) == NOP_EXPR
  1469.                  && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
  1470.             {
  1471.               int thisalign;
  1472.               t = TREE_OPERAND (t, 0);
  1473.               thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
  1474.               if (thisalign > bestalign)
  1475.                 best = t, bestalign = thisalign;
  1476.             }
  1477.               yyval.ttype = c_alignof (TREE_TYPE (TREE_TYPE (best)));
  1478.             }
  1479.           else
  1480.             {
  1481.               /* ANSI says arrays and fns are converted inside comma.
  1482.              But we can't convert them in build_compound_expr
  1483.              because that would break commas in lvalues.
  1484.              So do the conversion here if operand was a comma.  */
  1485.               if (TREE_CODE (yyvsp[0].ttype) == COMPOUND_EXPR
  1486.               && (TREE_CODE (TREE_TYPE (yyvsp[0].ttype)) == ARRAY_TYPE
  1487.                   || TREE_CODE (TREE_TYPE (yyvsp[0].ttype)) == FUNCTION_TYPE))
  1488.             yyvsp[0].ttype = default_conversion (yyvsp[0].ttype);
  1489.               yyval.ttype = c_alignof (TREE_TYPE (yyvsp[0].ttype));
  1490.             }
  1491.         ;
  1492.     break;}
  1493. case 50:
  1494. #line 347 "./c-parse.y"
  1495. { yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ;
  1496.     break;}
  1497. case 52:
  1498. #line 353 "./c-parse.y"
  1499. { tree type = groktypename (yyvsp[-2].ttype);
  1500.           yyval.ttype = build_c_cast (type, yyvsp[0].ttype); ;
  1501.     break;}
  1502. case 53:
  1503. #line 356 "./c-parse.y"
  1504. { tree type = groktypename (yyvsp[-5].ttype);
  1505.           if (pedantic)
  1506.             warning ("ANSI C forbids constructor expressions");
  1507.           yyval.ttype = digest_init (type, build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype)), 0);
  1508.           if (TREE_CODE (type) == ARRAY_TYPE && TYPE_SIZE (type) == 0)
  1509.             {
  1510.               int failure = complete_array_type (type, yyval.ttype, 1);
  1511.               if (failure)
  1512.             abort ();
  1513.             }
  1514.         ;
  1515.     break;}
  1516. case 55:
  1517. #line 372 "./c-parse.y"
  1518. { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1519.     break;}
  1520. case 56:
  1521. #line 374 "./c-parse.y"
  1522. { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1523.     break;}
  1524. case 57:
  1525. #line 376 "./c-parse.y"
  1526. { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1527.     break;}
  1528. case 58:
  1529. #line 378 "./c-parse.y"
  1530. { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1531.     break;}
  1532. case 59:
  1533. #line 380 "./c-parse.y"
  1534. { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1535.     break;}
  1536. case 60:
  1537. #line 382 "./c-parse.y"
  1538. { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1539.     break;}
  1540. case 61:
  1541. #line 384 "./c-parse.y"
  1542. { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1543.     break;}
  1544. case 62:
  1545. #line 386 "./c-parse.y"
  1546. { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1547.     break;}
  1548. case 63:
  1549. #line 388 "./c-parse.y"
  1550. { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1551.     break;}
  1552. case 64:
  1553. #line 390 "./c-parse.y"
  1554. { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1555.     break;}
  1556. case 65:
  1557. #line 392 "./c-parse.y"
  1558. { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1559.     break;}
  1560. case 66:
  1561. #line 394 "./c-parse.y"
  1562. { yyval.ttype = build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1563.     break;}
  1564. case 67:
  1565. #line 396 "./c-parse.y"
  1566. { yyval.ttype = build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1567.     break;}
  1568. case 68:
  1569. #line 398 "./c-parse.y"
  1570. { yyval.ttype = build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1571.     break;}
  1572. case 69:
  1573. #line 400 "./c-parse.y"
  1574. { yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1575.     break;}
  1576. case 70:
  1577. #line 402 "./c-parse.y"
  1578. { yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype); ;
  1579.     break;}
  1580. case 71:
  1581. #line 404 "./c-parse.y"
  1582. { yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype); ;
  1583.     break;}
  1584. case 72:
  1585. #line 409 "./c-parse.y"
  1586. { yyval.ttype = lastiddecl;
  1587.           /* Need this so some machines can import before code gen.
  1588.              Has to go here because ordinary declared things might
  1589.              not be examined again until after function asm code
  1590.              has been written. */
  1591.           if (yyval.ttype) import_a_declared_name(yyval.ttype);
  1592.           if (!yyval.ttype || yyval.ttype == error_mark_node)
  1593.             {
  1594.               if (yychar == YYEMPTY)
  1595.             yychar = YYLEX;
  1596.               if (yychar == '(')
  1597.             {
  1598.               yyval.ttype = implicitly_declare (yyvsp[0].ttype);
  1599.               assemble_external (yyval.ttype);
  1600.               TREE_USED (yyval.ttype) = 1;
  1601.             }
  1602.               else if (current_function_decl == 0)
  1603.             {
  1604.               error ("`%s' undeclared, outside of functions",
  1605.                  IDENTIFIER_POINTER (yyvsp[0].ttype));
  1606.               yyval.ttype = error_mark_node;
  1607.             }
  1608.               else
  1609.             {
  1610.               if (IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype) != error_mark_node
  1611.                   || IDENTIFIER_ERROR_LOCUS (yyvsp[0].ttype) != current_function_decl)
  1612.                 {
  1613.                   error ("`%s' undeclared (first use this function)",
  1614.                      IDENTIFIER_POINTER (yyvsp[0].ttype));
  1615.  
  1616.                   if (! undeclared_variable_notice)
  1617.                 {
  1618.                   error ("(Each undeclared identifier is reported only once");
  1619.                   error ("for each function it appears in.)");
  1620.                   undeclared_variable_notice = 1;
  1621.                 }
  1622.                 }
  1623.               yyval.ttype = error_mark_node;
  1624.               /* Prevent repeated error messages.  */
  1625.               IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype) = error_mark_node;
  1626.               IDENTIFIER_ERROR_LOCUS (yyvsp[0].ttype) = current_function_decl;
  1627.             }
  1628.             }
  1629.           else if (! TREE_USED (yyval.ttype))
  1630.             {
  1631.               if (TREE_EXTERNAL (yyval.ttype))
  1632.             assemble_external (yyval.ttype);
  1633.               TREE_USED (yyval.ttype) = 1;
  1634.             }
  1635.           if (TREE_CODE (yyval.ttype) == CONST_DECL)
  1636.             yyval.ttype = DECL_INITIAL (yyval.ttype);
  1637.         ;
  1638.     break;}
  1639. case 74:
  1640. #line 463 "./c-parse.y"
  1641. { yyval.ttype = combine_strings (yyvsp[0].ttype); ;
  1642.     break;}
  1643. case 75:
  1644. #line 465 "./c-parse.y"
  1645. { yyval.ttype = yyvsp[-1].ttype; ;
  1646.     break;}
  1647. case 76:
  1648. #line 467 "./c-parse.y"
  1649. { yyval.ttype = error_mark_node; ;
  1650.     break;}
  1651. case 77:
  1652. #line 469 "./c-parse.y"
  1653. { if (current_function_decl == 0)
  1654.             {
  1655.               error ("braced-group within expression allowed only inside a function");
  1656.               YYERROR;
  1657.             }
  1658.           keep_next_level ();
  1659.           yyval.ttype = expand_start_stmt_expr (); ;
  1660.     break;}
  1661. case 78:
  1662. #line 477 "./c-parse.y"
  1663. { tree rtl_exp;
  1664.           if (pedantic)
  1665.             warning ("ANSI C forbids braced-groups within expressions");
  1666.           rtl_exp = expand_end_stmt_expr (yyvsp[-2].ttype);
  1667.           yyval.ttype = yyvsp[-1].ttype;
  1668.           TREE_USED (yyval.ttype) = 0;
  1669.           /* Since the statements have side effects,
  1670.              consider this volatile.  */
  1671.           TREE_VOLATILE (yyval.ttype) = 1;
  1672.           TREE_TYPE (yyval.ttype) = TREE_TYPE (rtl_exp);
  1673.           STMT_BODY (yyval.ttype) = rtl_exp; ;
  1674.     break;}
  1675. case 79:
  1676. #line 489 "./c-parse.y"
  1677. { yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  1678.     break;}
  1679. case 80:
  1680. #line 491 "./c-parse.y"
  1681. { yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  1682.     break;}
  1683. case 81:
  1684. #line 493 "./c-parse.y"
  1685. { yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1686.     break;}
  1687. case 82:
  1688. #line 495 "./c-parse.y"
  1689. { yyval.ttype = build_component_ref (build_indirect_ref (yyvsp[-2].ttype, "->"), yyvsp[0].ttype); ;
  1690.     break;}
  1691. case 83:
  1692. #line 497 "./c-parse.y"
  1693. { yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ;
  1694.     break;}
  1695. case 84:
  1696. #line 499 "./c-parse.y"
  1697. { yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ;
  1698.     break;}
  1699. case 86:
  1700. #line 506 "./c-parse.y"
  1701. { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1702.     break;}
  1703. case 93:
  1704. #line 526 "./c-parse.y"
  1705. { yyval.itype = suspend_momentary ();
  1706.           declspec_stack = tree_cons (0, current_declspecs,
  1707.                           declspec_stack);
  1708.           current_declspecs = yyvsp[0].ttype; ;
  1709.     break;}
  1710. case 94:
  1711. #line 534 "./c-parse.y"
  1712. { current_declspecs = TREE_VALUE (declspec_stack);
  1713.           declspec_stack = TREE_CHAIN (declspec_stack);
  1714.           resume_momentary (yyvsp[-2].itype); ;
  1715.     break;}
  1716. case 95:
  1717. #line 538 "./c-parse.y"
  1718. { current_declspecs = TREE_VALUE (declspec_stack);
  1719.           declspec_stack = TREE_CHAIN (declspec_stack);
  1720.           resume_momentary (yyvsp[-2].itype); ;
  1721.     break;}
  1722. case 96:
  1723. #line 542 "./c-parse.y"
  1724. { shadow_tag (yyvsp[-1].ttype); ;
  1725.     break;}
  1726. case 97:
  1727. #line 544 "./c-parse.y"
  1728. { warning ("empty declaration"); ;
  1729.     break;}
  1730. case 98:
  1731. #line 553 "./c-parse.y"
  1732. { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1733.     break;}
  1734. case 99:
  1735. #line 555 "./c-parse.y"
  1736. { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
  1737.     break;}
  1738. case 100:
  1739. #line 559 "./c-parse.y"
  1740. { yyval.ttype = NULL_TREE; ;
  1741.     break;}
  1742. case 101:
  1743. #line 561 "./c-parse.y"
  1744. { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  1745.     break;}
  1746. case 102:
  1747. #line 563 "./c-parse.y"
  1748. { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  1749.     break;}
  1750. case 103:
  1751. #line 572 "./c-parse.y"
  1752. { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
  1753.     break;}
  1754. case 104:
  1755. #line 574 "./c-parse.y"
  1756. { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
  1757.     break;}
  1758. case 105:
  1759. #line 576 "./c-parse.y"
  1760. { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  1761.     break;}
  1762. case 106:
  1763. #line 578 "./c-parse.y"
  1764. { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  1765.     break;}
  1766. case 107:
  1767. #line 588 "./c-parse.y"
  1768. { yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1769.     break;}
  1770. case 108:
  1771. #line 590 "./c-parse.y"
  1772. { yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
  1773.     break;}
  1774. case 109:
  1775. #line 594 "./c-parse.y"
  1776. { yyval.ttype = NULL_TREE; ;
  1777.     break;}
  1778. case 110:
  1779. #line 596 "./c-parse.y"
  1780. { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  1781.     break;}
  1782. case 114:
  1783. #line 607 "./c-parse.y"
  1784. { yyval.ttype = TREE_TYPE (yyvsp[-1].ttype);
  1785.           if (pedantic)
  1786.             warning ("ANSI C forbids `typeof'"); ;
  1787.     break;}
  1788. case 115:
  1789. #line 611 "./c-parse.y"
  1790. { yyval.ttype = groktypename (yyvsp[-1].ttype);
  1791.           if (pedantic)
  1792.             warning ("ANSI C forbids `typeof'"); ;
  1793.     break;}
  1794. case 123:
  1795. #line 635 "./c-parse.y"
  1796. { yyval.ttype = NULL_TREE; ;
  1797.     break;}
  1798. case 124:
  1799. #line 637 "./c-parse.y"
  1800. { if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype);
  1801.           yyval.ttype = yyvsp[-1].ttype;
  1802.           if (pedantic)
  1803.             warning ("ANSI C forbids use of `asm' keyword");
  1804.         ;
  1805.     break;}
  1806. case 125:
  1807. #line 646 "./c-parse.y"
  1808. { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1); ;
  1809.     break;}
  1810. case 126:
  1811. #line 649 "./c-parse.y"
  1812. { finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
  1813.     break;}
  1814. case 127:
  1815. #line 651 "./c-parse.y"
  1816. { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0);
  1817.           finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;
  1818.     break;}
  1819. case 128:
  1820. #line 657 "./c-parse.y"
  1821. { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1); ;
  1822.     break;}
  1823. case 129:
  1824. #line 660 "./c-parse.y"
  1825. { finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
  1826.     break;}
  1827. case 130:
  1828. #line 662 "./c-parse.y"
  1829. { tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0);
  1830.           finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;
  1831.     break;}
  1832. case 131:
  1833. #line 669 "./c-parse.y"
  1834. { yyval.ttype = NULL_TREE; ;
  1835.     break;}
  1836. case 132:
  1837. #line 671 "./c-parse.y"
  1838. { yyval.ttype = yyvsp[-2].ttype; ;
  1839.     break;}
  1840. case 135:
  1841. #line 681 "./c-parse.y"
  1842. { warning ("`%s' attribute directive ignored",
  1843.            IDENTIFIER_POINTER (yyvsp[0].ttype));
  1844.       yyval.ttype = yyvsp[0].ttype; ;
  1845.     break;}
  1846. case 136:
  1847. #line 685 "./c-parse.y"
  1848. { /* if not "aligned(1)", then issue warning */
  1849.       if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "aligned") != 0
  1850.           || TREE_CODE (yyvsp[-1].ttype) != INTEGER_CST
  1851.           || TREE_INT_CST_LOW (yyvsp[-1].ttype) != 1)
  1852.         warning ("`%s' attribute directive ignored",
  1853.              IDENTIFIER_POINTER (yyvsp[-3].ttype));
  1854.       yyval.ttype = yyvsp[-3].ttype; ;
  1855.     break;}
  1856. case 137:
  1857. #line 693 "./c-parse.y"
  1858. { warning ("`%s' attribute directive ignored",
  1859.            IDENTIFIER_POINTER (yyvsp[-3].ttype));
  1860.       yyval.ttype = yyvsp[-3].ttype; ;
  1861.     break;}
  1862. case 139:
  1863. #line 701 "./c-parse.y"
  1864. { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, NULL_TREE);
  1865.           if (pedantic)
  1866.             warning ("ANSI C forbids empty initializer braces"); ;
  1867.     break;}
  1868. case 140:
  1869. #line 705 "./c-parse.y"
  1870. { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-1].ttype)); ;
  1871.     break;}
  1872. case 141:
  1873. #line 707 "./c-parse.y"
  1874. { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype)); ;
  1875.     break;}
  1876. case 142:
  1877. #line 709 "./c-parse.y"
  1878. { yyval.ttype = NULL_TREE; ;
  1879.     break;}
  1880. case 143:
  1881. #line 716 "./c-parse.y"
  1882. { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
  1883.     break;}
  1884. case 144:
  1885. #line 718 "./c-parse.y"
  1886. { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ;
  1887.     break;}
  1888. case 147:
  1889. #line 733 "./c-parse.y"
  1890. { yyval.ttype = yyvsp[-1].ttype; ;
  1891.     break;}
  1892. case 148:
  1893. #line 735 "./c-parse.y"
  1894. { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  1895.     break;}
  1896. case 149:
  1897. #line 740 "./c-parse.y"
  1898. { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  1899.     break;}
  1900. case 150:
  1901. #line 742 "./c-parse.y"
  1902. { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  1903.     break;}
  1904. case 151:
  1905. #line 744 "./c-parse.y"
  1906. { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1907.     break;}
  1908. case 153:
  1909. #line 755 "./c-parse.y"
  1910. { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  1911.     break;}
  1912. case 154:
  1913. #line 760 "./c-parse.y"
  1914. { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  1915.     break;}
  1916. case 155:
  1917. #line 762 "./c-parse.y"
  1918. { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  1919.     break;}
  1920. case 156:
  1921. #line 764 "./c-parse.y"
  1922. { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1923.     break;}
  1924. case 158:
  1925. #line 773 "./c-parse.y"
  1926. { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  1927.     break;}
  1928. case 159:
  1929. #line 778 "./c-parse.y"
  1930. { yyval.ttype = yyvsp[-1].ttype; ;
  1931.     break;}
  1932. case 160:
  1933. #line 780 "./c-parse.y"
  1934. { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1935.     break;}
  1936. case 161:
  1937. #line 782 "./c-parse.y"
  1938. { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  1939.     break;}
  1940. case 162:
  1941. #line 784 "./c-parse.y"
  1942. { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  1943.     break;}
  1944. case 164:
  1945. #line 790 "./c-parse.y"
  1946. { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
  1947.           /* Start scope of tag before parsing components.  */
  1948.         ;
  1949.     break;}
  1950. case 165:
  1951. #line 794 "./c-parse.y"
  1952. { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype);
  1953.           /* Really define the structure.  */
  1954.         ;
  1955.     break;}
  1956. case 166:
  1957. #line 798 "./c-parse.y"
  1958. { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
  1959.                       yyvsp[-1].ttype); ;
  1960.     break;}
  1961. case 167:
  1962. #line 801 "./c-parse.y"
  1963. { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
  1964.     break;}
  1965. case 168:
  1966. #line 803 "./c-parse.y"
  1967. { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
  1968.     break;}
  1969. case 169:
  1970. #line 805 "./c-parse.y"
  1971. { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
  1972.     break;}
  1973. case 170:
  1974. #line 807 "./c-parse.y"
  1975. { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
  1976.                       yyvsp[-1].ttype); ;
  1977.     break;}
  1978. case 171:
  1979. #line 810 "./c-parse.y"
  1980. { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
  1981.     break;}
  1982. case 172:
  1983. #line 812 "./c-parse.y"
  1984. { yyvsp[0].itype = suspend_momentary ();
  1985.           yyval.ttype = start_enum (yyvsp[-1].ttype); ;
  1986.     break;}
  1987. case 173:
  1988. #line 815 "./c-parse.y"
  1989. { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
  1990.           resume_momentary (yyvsp[-4].itype); ;
  1991.     break;}
  1992. case 174:
  1993. #line 818 "./c-parse.y"
  1994. { yyvsp[0].itype = suspend_momentary ();
  1995.           yyval.ttype = start_enum (NULL_TREE); ;
  1996.     break;}
  1997. case 175:
  1998. #line 821 "./c-parse.y"
  1999. { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
  2000.           resume_momentary (yyvsp[-4].itype); ;
  2001.     break;}
  2002. case 176:
  2003. #line 824 "./c-parse.y"
  2004. { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ;
  2005.     break;}
  2006. case 180:
  2007. #line 835 "./c-parse.y"
  2008. { if (pedantic) warning ("comma at end of enumerator list"); ;
  2009.     break;}
  2010. case 181:
  2011. #line 839 "./c-parse.y"
  2012. { yyval.ttype = NULL_TREE; ;
  2013.     break;}
  2014. case 182:
  2015. #line 841 "./c-parse.y"
  2016. { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
  2017.     break;}
  2018. case 183:
  2019. #line 843 "./c-parse.y"
  2020. { if (pedantic)
  2021.             warning ("extra semicolon in struct or union specified"); ;
  2022.     break;}
  2023. case 184:
  2024. #line 858 "./c-parse.y"
  2025. { yyval.ttype = yyvsp[0].ttype;
  2026.           current_declspecs = TREE_VALUE (declspec_stack);
  2027.           declspec_stack = TREE_CHAIN (declspec_stack);
  2028.           resume_momentary (yyvsp[-1].itype); ;
  2029.     break;}
  2030. case 185:
  2031. #line 863 "./c-parse.y"
  2032. { yyval.ttype = yyvsp[0].ttype;
  2033.           current_declspecs = TREE_VALUE (declspec_stack);
  2034.           declspec_stack = TREE_CHAIN (declspec_stack);
  2035.           resume_momentary (yyvsp[-1].itype); ;
  2036.     break;}
  2037. case 186:
  2038. #line 868 "./c-parse.y"
  2039. { yyval.ttype = NULL_TREE; ;
  2040.     break;}
  2041. case 187:
  2042. #line 873 "./c-parse.y"
  2043. { if (pedantic)
  2044.             warning ("ANSI C forbids member declarations with no members");
  2045.           yyval.ttype = NULL_TREE; ;
  2046.     break;}
  2047. case 189:
  2048. #line 878 "./c-parse.y"
  2049. { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  2050.     break;}
  2051. case 190:
  2052. #line 883 "./c-parse.y"
  2053. { yyval.ttype = grokfield (input_filename, lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE); ;
  2054.     break;}
  2055. case 191:
  2056. #line 885 "./c-parse.y"
  2057. { yyval.ttype = grokfield (input_filename, lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype); ;
  2058.     break;}
  2059. case 192:
  2060. #line 887 "./c-parse.y"
  2061. { yyval.ttype = grokfield (input_filename, lineno, NULL_TREE, current_declspecs, yyvsp[0].ttype); ;
  2062.     break;}
  2063. case 194:
  2064. #line 898 "./c-parse.y"
  2065. { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
  2066.     break;}
  2067. case 195:
  2068. #line 904 "./c-parse.y"
  2069. { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
  2070.     break;}
  2071. case 196:
  2072. #line 906 "./c-parse.y"
  2073. { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  2074.     break;}
  2075. case 197:
  2076. #line 911 "./c-parse.y"
  2077. { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  2078.     break;}
  2079. case 198:
  2080. #line 913 "./c-parse.y"
  2081. { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  2082.     break;}
  2083. case 199:
  2084. #line 918 "./c-parse.y"
  2085. { yyval.ttype = NULL_TREE; ;
  2086.     break;}
  2087. case 201:
  2088. #line 924 "./c-parse.y"
  2089. { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
  2090.     break;}
  2091. case 202:
  2092. #line 926 "./c-parse.y"
  2093. { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  2094.     break;}
  2095. case 203:
  2096. #line 931 "./c-parse.y"
  2097. { yyval.ttype = NULL_TREE; ;
  2098.     break;}
  2099. case 204:
  2100. #line 933 "./c-parse.y"
  2101. { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  2102.     break;}
  2103. case 205:
  2104. #line 938 "./c-parse.y"
  2105. { yyval.ttype = yyvsp[-1].ttype; ;
  2106.     break;}
  2107. case 206:
  2108. #line 941 "./c-parse.y"
  2109. { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  2110.     break;}
  2111. case 207:
  2112. #line 943 "./c-parse.y"
  2113. { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
  2114.     break;}
  2115. case 208:
  2116. #line 945 "./c-parse.y"
  2117. { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  2118.     break;}
  2119. case 209:
  2120. #line 947 "./c-parse.y"
  2121. { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  2122.     break;}
  2123. case 210:
  2124. #line 949 "./c-parse.y"
  2125. { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  2126.     break;}
  2127. case 211:
  2128. #line 951 "./c-parse.y"
  2129. { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
  2130.     break;}
  2131. case 212:
  2132. #line 953 "./c-parse.y"
  2133. { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
  2134.     break;}
  2135. case 213:
  2136. #line 955 "./c-parse.y"
  2137. { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;
  2138.     break;}
  2139. case 220:
  2140. #line 977 "./c-parse.y"
  2141. { pushlevel (0);
  2142.           clear_last_expr ();
  2143.           push_momentary ();
  2144.           expand_start_bindings (0); ;
  2145.     break;}
  2146. case 221:
  2147. #line 987 "./c-parse.y"
  2148. {;
  2149.     break;}
  2150. case 223:
  2151. #line 992 "./c-parse.y"
  2152. { yyval.ttype = 0; ;
  2153.     break;}
  2154. case 224:
  2155. #line 994 "./c-parse.y"
  2156. { expand_end_bindings (getdecls (), 1, 0);
  2157.           yyval.ttype = poplevel (1, 1, 0);
  2158.           pop_momentary (); ;
  2159.     break;}
  2160. case 225:
  2161. #line 998 "./c-parse.y"
  2162. { expand_end_bindings (getdecls (), kept_level_p (), 0);
  2163.           yyval.ttype = poplevel (kept_level_p (), 0, 0);
  2164.           pop_momentary (); ;
  2165.     break;}
  2166. case 226:
  2167. #line 1002 "./c-parse.y"
  2168. { expand_end_bindings (getdecls (), kept_level_p (), 0);
  2169.           yyval.ttype = poplevel (kept_level_p (), 0, 0);
  2170.           pop_momentary (); ;
  2171.     break;}
  2172. case 227:
  2173. #line 1009 "./c-parse.y"
  2174. { emit_line_note (input_filename, lineno);
  2175.           expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0); ;
  2176.     break;}
  2177. case 229:
  2178. #line 1015 "./c-parse.y"
  2179. {;
  2180.     break;}
  2181. case 230:
  2182. #line 1017 "./c-parse.y"
  2183. { emit_line_note (input_filename, lineno);
  2184.           /* Do default conversion if safe and possibly important,
  2185.              in case within ({...}).  */
  2186.           if ((TREE_CODE (TREE_TYPE (yyvsp[-1].ttype)) == ARRAY_TYPE
  2187.                && lvalue_p (yyvsp[-1].ttype))
  2188.               || TREE_CODE (TREE_TYPE (yyvsp[-1].ttype)) == FUNCTION_TYPE)
  2189.             yyvsp[-1].ttype = default_conversion (yyvsp[-1].ttype);
  2190.           expand_expr_stmt (yyvsp[-1].ttype);
  2191.           clear_momentary (); ;
  2192.     break;}
  2193. case 231:
  2194. #line 1027 "./c-parse.y"
  2195. { expand_start_else (); ;
  2196.     break;}
  2197. case 232:
  2198. #line 1029 "./c-parse.y"
  2199. { expand_end_else (); ;
  2200.     break;}
  2201. case 233:
  2202. #line 1031 "./c-parse.y"
  2203. { expand_end_cond (); ;
  2204.     break;}
  2205. case 234:
  2206. #line 1033 "./c-parse.y"
  2207. { emit_nop ();
  2208.           emit_line_note (input_filename, lineno);
  2209.           expand_start_loop (1); ;
  2210.     break;}
  2211. case 235:
  2212. #line 1037 "./c-parse.y"
  2213. { emit_line_note (input_filename, lineno);
  2214.           expand_exit_loop_if_false (truthvalue_conversion (yyvsp[-1].ttype)); ;
  2215.     break;}
  2216. case 236:
  2217. #line 1040 "./c-parse.y"
  2218. { expand_end_loop (); ;
  2219.     break;}
  2220. case 237:
  2221. #line 1042 "./c-parse.y"
  2222. { emit_nop ();
  2223.           emit_line_note (input_filename, lineno);
  2224.           expand_start_loop_continue_elsewhere (1); ;
  2225.     break;}
  2226. case 238:
  2227. #line 1046 "./c-parse.y"
  2228. { expand_loop_continue_here (); ;
  2229.     break;}
  2230. case 239:
  2231. #line 1048 "./c-parse.y"
  2232. { emit_line_note (input_filename, lineno);
  2233.           expand_exit_loop_if_false (truthvalue_conversion (yyvsp[-2].ttype));
  2234.           expand_end_loop ();
  2235.           clear_momentary (); ;
  2236.     break;}
  2237. case 240:
  2238. #line 1054 "./c-parse.y"
  2239. { emit_nop ();
  2240.           emit_line_note (input_filename, lineno);
  2241.           if (yyvsp[-1].ttype) expand_expr_stmt (yyvsp[-1].ttype);
  2242.           expand_start_loop_continue_elsewhere (1); ;
  2243.     break;}
  2244. case 241:
  2245. #line 1059 "./c-parse.y"
  2246. { emit_line_note (input_filename, lineno);
  2247.           if (yyvsp[-1].ttype)
  2248.             expand_exit_loop_if_false (truthvalue_conversion (yyvsp[-1].ttype)); ;
  2249.     break;}
  2250. case 242:
  2251. #line 1065 "./c-parse.y"
  2252. { push_momentary ();
  2253.           yyvsp[0].itype = lineno; ;
  2254.     break;}
  2255. case 243:
  2256. #line 1068 "./c-parse.y"
  2257. { emit_line_note (input_filename, yyvsp[-2].itype);
  2258.           expand_loop_continue_here ();
  2259.           if (yyvsp[-3].ttype)
  2260.             expand_expr_stmt (yyvsp[-3].ttype);
  2261.           pop_momentary ();
  2262.           expand_end_loop (); ;
  2263.     break;}
  2264. case 244:
  2265. #line 1075 "./c-parse.y"
  2266. { emit_line_note (input_filename, lineno);
  2267.           c_expand_start_case (yyvsp[-1].ttype);
  2268.           /* Don't let the tree nodes for $3 be discarded by
  2269.              clear_momentary during the parsing of the next stmt.  */
  2270.           push_momentary (); ;
  2271.     break;}
  2272. case 245:
  2273. #line 1081 "./c-parse.y"
  2274. { expand_end_case (yyvsp[-3].ttype);
  2275.           pop_momentary (); ;
  2276.     break;}
  2277. case 246:
  2278. #line 1084 "./c-parse.y"
  2279. { register tree value = fold (yyvsp[-1].ttype);
  2280.           register tree label
  2281.             = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
  2282.  
  2283.           /* build_c_cast puts on a NOP_EXPR to make a non-lvalue.
  2284.              Strip such NOP_EXPRs.  */
  2285.           if (TREE_CODE (value) == NOP_EXPR
  2286.               && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0)))
  2287.             value = TREE_OPERAND (value, 0);
  2288.  
  2289.           if (TREE_CODE (value) != INTEGER_CST
  2290.               && value != error_mark_node)
  2291.             {
  2292.               error ("case label does not reduce to an integer constant");
  2293.               value = error_mark_node;
  2294.             }
  2295.           else
  2296.             /* Promote char or short to int.  */
  2297.             value = default_conversion (value);
  2298.           if (value != error_mark_node)
  2299.             {
  2300.               int success = pushcase (value, label);
  2301.               if (success == 1)
  2302.             error ("case label not within a switch statement");
  2303.               else if (success == 2)
  2304.             error ("duplicate case value");
  2305.               else if (success == 3)
  2306.             warning ("case value out of range");
  2307.             }
  2308.         ;
  2309.     break;}
  2310. case 248:
  2311. #line 1116 "./c-parse.y"
  2312. {
  2313.           register tree label
  2314.             = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
  2315.           int success = pushcase (NULL_TREE, label);
  2316.           if (success == 1)
  2317.             error ("default label not within a switch statement");
  2318.           else if (success == 2)
  2319.             error ("multiple default labels in one switch");
  2320.         ;
  2321.     break;}
  2322. case 250:
  2323. #line 1127 "./c-parse.y"
  2324. { emit_line_note (input_filename, lineno);
  2325.           if ( ! expand_exit_something ())
  2326.             error ("break statement not within loop or switch"); ;
  2327.     break;}
  2328. case 251:
  2329. #line 1131 "./c-parse.y"
  2330. { emit_line_note (input_filename, lineno);
  2331.           if (! expand_continue_loop ())
  2332.             error ("continue statement not within a loop"); ;
  2333.     break;}
  2334. case 252:
  2335. #line 1135 "./c-parse.y"
  2336. { emit_line_note (input_filename, lineno);
  2337.           c_expand_return (NULL_TREE); ;
  2338.     break;}
  2339. case 253:
  2340. #line 1138 "./c-parse.y"
  2341. { emit_line_note (input_filename, lineno);
  2342.           c_expand_return (yyvsp[-1].ttype); ;
  2343.     break;}
  2344. case 254:
  2345. #line 1141 "./c-parse.y"
  2346. { if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype);
  2347.           emit_line_note (input_filename, lineno);
  2348.           expand_asm (yyvsp[-2].ttype); ;
  2349.     break;}
  2350. case 255:
  2351. #line 1146 "./c-parse.y"
  2352. { if (TREE_CHAIN (yyvsp[-4].ttype)) yyvsp[-4].ttype = combine_strings (yyvsp[-4].ttype);
  2353.           emit_line_note (input_filename, lineno);
  2354.           c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
  2355.                      yyvsp[-6].ttype == ridpointers[(int)RID_VOLATILE],
  2356.                      input_filename, lineno); ;
  2357.     break;}
  2358. case 256:
  2359. #line 1153 "./c-parse.y"
  2360. { if (TREE_CHAIN (yyvsp[-6].ttype)) yyvsp[-6].ttype = combine_strings (yyvsp[-6].ttype);
  2361.           emit_line_note (input_filename, lineno);
  2362.           c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
  2363.                      yyvsp[-8].ttype == ridpointers[(int)RID_VOLATILE],
  2364.                      input_filename, lineno); ;
  2365.     break;}
  2366. case 257:
  2367. #line 1161 "./c-parse.y"
  2368. { if (TREE_CHAIN (yyvsp[-8].ttype)) yyvsp[-8].ttype = combine_strings (yyvsp[-8].ttype);
  2369.           emit_line_note (input_filename, lineno);
  2370.           c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
  2371.                      yyvsp[-10].ttype == ridpointers[(int)RID_VOLATILE],
  2372.                      input_filename, lineno); ;
  2373.     break;}
  2374. case 258:
  2375. #line 1167 "./c-parse.y"
  2376. { tree decl;
  2377.           emit_line_note (input_filename, lineno);
  2378.           decl = lookup_label (yyvsp[-1].ttype);
  2379.           TREE_USED (decl) = 1;
  2380.           expand_goto (decl); ;
  2381.     break;}
  2382. case 259:
  2383. #line 1173 "./c-parse.y"
  2384. { tree label = define_label (input_filename, lineno, yyvsp[-1].ttype);
  2385.           emit_nop ();
  2386.           if (label)
  2387.             expand_label (label); ;
  2388.     break;}
  2389. case 262:
  2390. #line 1185 "./c-parse.y"
  2391. { if (pedantic)
  2392.             warning ("ANSI C forbids use of `asm' keyword");
  2393.           emit_line_note (input_filename, lineno); ;
  2394.     break;}
  2395. case 263:
  2396. #line 1189 "./c-parse.y"
  2397. { if (pedantic)
  2398.             warning ("ANSI C forbids use of `asm' keyword");
  2399.           emit_line_note (input_filename, lineno); ;
  2400.     break;}
  2401. case 264:
  2402. #line 1196 "./c-parse.y"
  2403. { yyval.ttype = NULL_TREE; ;
  2404.     break;}
  2405. case 266:
  2406. #line 1203 "./c-parse.y"
  2407. { yyval.ttype = NULL_TREE; ;
  2408.     break;}
  2409. case 269:
  2410. #line 1210 "./c-parse.y"
  2411. { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  2412.     break;}
  2413. case 270:
  2414. #line 1215 "./c-parse.y"
  2415. { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  2416.     break;}
  2417. case 271:
  2418. #line 1220 "./c-parse.y"
  2419. { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ;
  2420.     break;}
  2421. case 272:
  2422. #line 1222 "./c-parse.y"
  2423. { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ;
  2424.     break;}
  2425. case 273:
  2426. #line 1228 "./c-parse.y"
  2427. { pushlevel (0);
  2428.           declare_parm_level (); ;
  2429.     break;}
  2430. case 274:
  2431. #line 1231 "./c-parse.y"
  2432. { yyval.ttype = yyvsp[0].ttype;
  2433.           parmlist_tags_warning ();
  2434.           poplevel (0, 0, 0); ;
  2435.     break;}
  2436. case 275:
  2437. #line 1239 "./c-parse.y"
  2438. { pushlevel (0);
  2439.           declare_parm_level (); ;
  2440.     break;}
  2441. case 276:
  2442. #line 1242 "./c-parse.y"
  2443. { yyval.ttype = yyvsp[0].ttype;
  2444.           parmlist_tags_warning ();
  2445.           poplevel (0, 0, 0); ;
  2446.     break;}
  2447. case 278:
  2448. #line 1250 "./c-parse.y"
  2449. { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ;
  2450.     break;}
  2451. case 279:
  2452. #line 1252 "./c-parse.y"
  2453. { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
  2454.     break;}
  2455. case 281:
  2456. #line 1258 "./c-parse.y"
  2457. { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
  2458.     break;}
  2459. case 282:
  2460. #line 1264 "./c-parse.y"
  2461. { yyval.ttype = get_parm_info (0); ;
  2462.     break;}
  2463. case 283:
  2464. #line 1266 "./c-parse.y"
  2465. { yyval.ttype = get_parm_info (1); ;
  2466.     break;}
  2467. case 284:
  2468. #line 1268 "./c-parse.y"
  2469. { yyval.ttype = get_parm_info (0); ;
  2470.     break;}
  2471. case 285:
  2472. #line 1273 "./c-parse.y"
  2473. { push_parm_decl (yyvsp[0].ttype); ;
  2474.     break;}
  2475. case 286:
  2476. #line 1275 "./c-parse.y"
  2477. { push_parm_decl (yyvsp[0].ttype); ;
  2478.     break;}
  2479. case 287:
  2480. #line 1282 "./c-parse.y"
  2481. { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  2482.     break;}
  2483. case 288:
  2484. #line 1284 "./c-parse.y"
  2485. { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  2486.     break;}
  2487. case 289:
  2488. #line 1286 "./c-parse.y"
  2489. { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  2490.     break;}
  2491. case 290:
  2492. #line 1288 "./c-parse.y"
  2493. { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  2494.     break;}
  2495. case 291:
  2496. #line 1290 "./c-parse.y"
  2497. { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  2498.     break;}
  2499. case 292:
  2500. #line 1296 "./c-parse.y"
  2501. { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
  2502.     break;}
  2503. case 293:
  2504. #line 1298 "./c-parse.y"
  2505. { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
  2506.     break;}
  2507. }
  2508.    /* the action file gets copied in in place of this dollarsign */
  2509. #line 423 "bison.simple"
  2510.  
  2511.   yyvsp -= yylen;
  2512.   yyssp -= yylen;
  2513. #ifdef YYLSP_NEEDED
  2514.   yylsp -= yylen;
  2515. #endif
  2516.  
  2517. #if YYDEBUG != 0
  2518.   if (yydebug)
  2519.     {
  2520.       short *ssp1 = yyss - 1;
  2521.       fprintf (stderr, "state stack now");
  2522.       while (ssp1 != yyssp)
  2523.     fprintf (stderr, " %d", *++ssp1);
  2524.       fprintf (stderr, "\n");
  2525.     }
  2526. #endif
  2527.  
  2528.   *++yyvsp = yyval;
  2529.  
  2530. #ifdef YYLSP_NEEDED
  2531.   yylsp++;
  2532.   if (yylen == 0)
  2533.     {
  2534.       yylsp->first_line = yylloc.first_line;
  2535.       yylsp->first_column = yylloc.first_column;
  2536.       yylsp->last_line = (yylsp-1)->last_line;
  2537.       yylsp->last_column = (yylsp-1)->last_column;
  2538.       yylsp->text = 0;
  2539.     }
  2540.   else
  2541.     {
  2542.       yylsp->last_line = (yylsp+yylen-1)->last_line;
  2543.       yylsp->last_column = (yylsp+yylen-1)->last_column;
  2544.     }
  2545. #endif
  2546.  
  2547.   /* Now "shift" the result of the reduction.
  2548.      Determine what state that goes to,
  2549.      based on the state we popped back to
  2550.      and the rule number reduced by.  */
  2551.  
  2552.   yyn = yyr1[yyn];
  2553.  
  2554.   yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
  2555.   if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
  2556.     yystate = yytable[yystate];
  2557.   else
  2558.     yystate = yydefgoto[yyn - YYNTBASE];
  2559.  
  2560.   goto yynewstate;
  2561.  
  2562. yyerrlab:   /* here on detecting error */
  2563.  
  2564.   if (! yyerrstatus)
  2565.     /* If not already recovering from an error, report this error.  */
  2566.     {
  2567.       ++yynerrs;
  2568.  
  2569. #ifdef YYERROR_VERBOSE
  2570.       yyn = yypact[yystate];
  2571.  
  2572.       if (yyn > YYFLAG && yyn < YYLAST)
  2573.     {
  2574.       int size = 0;
  2575.       char *msg;
  2576.       int x, count;
  2577.  
  2578.       count = 0;
  2579.       for (x = 0; x < (sizeof(yytname) / sizeof(char *)); x++)
  2580.         if (yycheck[x + yyn] == x)
  2581.           size += strlen(yytname[x]) + 15, count++;
  2582.       msg = (char *) xmalloc(size + 15);
  2583.       strcpy(msg, "parse error");
  2584.  
  2585.       if (count < 5)
  2586.         {
  2587.           count = 0;
  2588.           for (x = 0; x < (sizeof(yytname) / sizeof(char *)); x++)
  2589.         if (yycheck[x + yyn] == x)
  2590.           {
  2591.             strcat(msg, count == 0 ? ", expecting `" : " or `");
  2592.             strcat(msg, yytname[x]);
  2593.             strcat(msg, "'");
  2594.             count++;
  2595.           }
  2596.         }
  2597.       yyerror(msg);
  2598.       free(msg);
  2599.     }
  2600.       else
  2601. #endif /* YYERROR_VERBOSE */
  2602.     yyerror("parse error");
  2603.     }
  2604.  
  2605. yyerrlab1:   /* here on error raised explicitly by an action */
  2606.  
  2607.   if (yyerrstatus == 3)
  2608.     {
  2609.       /* if just tried and failed to reuse lookahead token after an error, discard it.  */
  2610.  
  2611.       /* return failure if at end of input */
  2612.       if (yychar == YYEOF)
  2613.     YYABORT;
  2614.  
  2615. #if YYDEBUG != 0
  2616.       if (yydebug)
  2617.     fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
  2618. #endif
  2619.  
  2620.       yychar = YYEMPTY;
  2621.     }
  2622.  
  2623.   /* Else will try to reuse lookahead token
  2624.      after shifting the error token.  */
  2625.  
  2626.   yyerrstatus = 3;        /* Each real token shifted decrements this */
  2627.  
  2628.   goto yyerrhandle;
  2629.  
  2630. yyerrdefault:  /* current state does not do anything special for the error token. */
  2631.  
  2632. #if 0
  2633.   /* This is wrong; only states that explicitly want error tokens
  2634.      should shift them.  */
  2635.   yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
  2636.   if (yyn) goto yydefault;
  2637. #endif
  2638.  
  2639. yyerrpop:   /* pop the current state because it cannot handle the error token */
  2640.  
  2641.   if (yyssp == yyss) YYABORT;
  2642.   yyvsp--;
  2643.   yystate = *--yyssp;
  2644. #ifdef YYLSP_NEEDED
  2645.   yylsp--;
  2646. #endif
  2647.  
  2648. #if YYDEBUG != 0
  2649.   if (yydebug)
  2650.     {
  2651.       short *ssp1 = yyss - 1;
  2652.       fprintf (stderr, "Error: state stack now");
  2653.       while (ssp1 != yyssp)
  2654.     fprintf (stderr, " %d", *++ssp1);
  2655.       fprintf (stderr, "\n");
  2656.     }
  2657. #endif
  2658.  
  2659. yyerrhandle:
  2660.  
  2661.   yyn = yypact[yystate];
  2662.   if (yyn == YYFLAG)
  2663.     goto yyerrdefault;
  2664.  
  2665.   yyn += YYTERROR;
  2666.   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
  2667.     goto yyerrdefault;
  2668.  
  2669.   yyn = yytable[yyn];
  2670.   if (yyn < 0)
  2671.     {
  2672.       if (yyn == YYFLAG)
  2673.     goto yyerrpop;
  2674.       yyn = -yyn;
  2675.       goto yyreduce;
  2676.     }
  2677.   else if (yyn == 0)
  2678.     goto yyerrpop;
  2679.  
  2680.   if (yyn == YYFINAL)
  2681.     YYACCEPT;
  2682.  
  2683. #if YYDEBUG != 0
  2684.   if (yydebug)
  2685.     fprintf(stderr, "Shifting error token, ");
  2686. #endif
  2687.  
  2688.   *++yyvsp = yylval;
  2689. #ifdef YYLSP_NEEDED
  2690.   *++yylsp = yylloc;
  2691. #endif
  2692.  
  2693.   yystate = yyn;
  2694.   goto yynewstate;
  2695. }
  2696. #line 1300 "./c-parse.y"
  2697.  
  2698.  
  2699. /* Return something to represent absolute declarators containing a *.
  2700.    TARGET is the absolute declarator that the * contains.
  2701.    TYPE_QUALS is a list of modifiers such as const or volatile
  2702.    to apply to the pointer type, represented as identifiers.
  2703.  
  2704.    We return an INDIRECT_REF whose "contents" are TARGET
  2705.    and whose type is the modifier list.  */
  2706.  
  2707. static tree
  2708. make_pointer_declarator (type_quals, target)
  2709.      tree type_quals, target;
  2710. {
  2711.   return build (INDIRECT_REF, type_quals, target);
  2712. }
  2713.  
  2714. /* Given a chain of STRING_CST nodes,
  2715.    concatenate them into one STRING_CST
  2716.    and give it a suitable array-of-chars data type.  */
  2717.  
  2718. static tree
  2719. combine_strings (strings)
  2720.      tree strings;
  2721. {
  2722.   register tree value, t;
  2723.   register int length = 1;
  2724.   int wide_length = 0;
  2725.   int wide_flag = 0;
  2726.  
  2727.   if (TREE_CHAIN (strings))
  2728.     {
  2729.       /* More than one in the chain, so concatenate.  */
  2730.       register char *p, *q;
  2731.  
  2732.       /* Don't include the \0 at the end of each substring,
  2733.      except for the last one.
  2734.      Count wide strings and ordinary strings separately.  */
  2735.       for (t = strings; t; t = TREE_CHAIN (t))
  2736.     {
  2737.       if (TREE_TYPE (t) == int_array_type_node)
  2738.         {
  2739.           wide_length += (TREE_STRING_LENGTH (t) - 1);
  2740.           wide_flag = 1;
  2741.         }
  2742.       else
  2743.         length += (TREE_STRING_LENGTH (t) - 1);
  2744.     }
  2745.  
  2746.       /* If anything is wide, the non-wides will be converted,
  2747.      which makes them take more space.  */
  2748.       if (wide_flag)
  2749.     length = length * UNITS_PER_WORD + wide_length;
  2750.  
  2751.       p = (char *) savealloc (length);
  2752.  
  2753.       /* Copy the individual strings into the new combined string.
  2754.      If the combined string is wide, convert the chars to ints
  2755.      for any individual strings that are not wide.  */
  2756.  
  2757.       q = p;
  2758.       for (t = strings; t; t = TREE_CHAIN (t))
  2759.     {
  2760.       int len = TREE_STRING_LENGTH (t) - 1;
  2761.       if ((TREE_TYPE (t) == int_array_type_node) == wide_flag)
  2762.         {
  2763.           bcopy (TREE_STRING_POINTER (t), q, len);
  2764.           q += len;
  2765.         }
  2766.       else
  2767.         {
  2768.           int i;
  2769.           for (i = 0; i < len; i++)
  2770.         ((int *) q)[i] = TREE_STRING_POINTER (t)[i];
  2771.           q += len * UNITS_PER_WORD;
  2772.         }
  2773.     }
  2774.       *q = 0;
  2775.  
  2776.       value = make_node (STRING_CST);
  2777.       TREE_STRING_POINTER (value) = p;
  2778.       TREE_STRING_LENGTH (value) = length;
  2779.       TREE_LITERAL (value) = 1;
  2780.     }
  2781.   else
  2782.     {
  2783.       value = strings;
  2784.       length = TREE_STRING_LENGTH (value);
  2785.       if (TREE_TYPE (value) == int_array_type_node)
  2786.     wide_flag = 1;
  2787.     }
  2788.  
  2789.   /* Create the array type for the string constant.
  2790.      -Wwrite-strings says make the string constant an array of const char
  2791.      so that copying it to a non-const pointer will get a warning.  */
  2792.   if (warn_write_strings)
  2793.     {
  2794.       tree elements
  2795.     = build_type_variant (wide_flag ? integer_type_node : char_type_node,
  2796.                   1, 0, 0);
  2797.       TREE_TYPE (value)
  2798.     = build_array_type (elements,
  2799.                 build_index_type (build_int_2 (length - 1, 0)));
  2800.     }
  2801.   else
  2802.     TREE_TYPE (value)
  2803.       = build_array_type (wide_flag ? integer_type_node : char_type_node,
  2804.               build_index_type (build_int_2 (length - 1, 0)));
  2805.   TREE_LITERAL (value) = 1;
  2806.   TREE_STATIC (value) = 1;
  2807.   return value;
  2808. }
  2809.  
  2810. int lineno;            /* current line number in file being read */
  2811.  
  2812. FILE *finput;            /* input file.
  2813.                    Normally a pipe from the preprocessor.  */
  2814.  
  2815. /* lexical analyzer */
  2816.  
  2817. static int maxtoken;        /* Current nominal length of token buffer.  */
  2818. static char *token_buffer;    /* Pointer to token buffer.
  2819.                    Actual allocated length is maxtoken + 2.  */
  2820. static int max_wide;        /* Current nominal length of wide_buffer.  */
  2821. static int *wide_buffer;    /* Pointer to wide-string buffer.
  2822.                    Actual allocated length is max_wide + 1.  */
  2823.  
  2824. /* Nonzero if end-of-file has been seen on input.  */
  2825. static int end_of_file;
  2826.  
  2827. #ifdef APPLE_C
  2828. /* The following code is a machine-generated perfect hash table that has
  2829.    been extended to recognize Apple keywords. */
  2830. #define NORID RID_UNUSED
  2831.  
  2832. /* C code produced by gperf version 1.8.1 (GNU C++ version) */
  2833.  
  2834. /* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf  */ 
  2835. struct resword { char *name; short token; enum rid rid; };
  2836.  
  2837. #define MIN_WORD_LENGTH 2
  2838. #define MAX_WORD_LENGTH 13
  2839. #define MIN_HASH_VALUE 7
  2840. #define MAX_HASH_VALUE 91
  2841. /*
  2842.    54 keywords
  2843.    85 is the maximum key range
  2844. */
  2845.  
  2846. #ifdef __GNUC__
  2847. inline
  2848. #endif
  2849. static int
  2850. hash (str, len)
  2851.      register char *str;
  2852.      register int unsigned len;
  2853. {
  2854.   static unsigned char hash_table[] =
  2855.     {
  2856.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  2857.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  2858.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  2859.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  2860.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  2861.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  2862.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  2863.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  2864.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  2865.      91, 91, 91, 91, 91,  1, 91,  2,  1, 16,
  2866.      10,  5, 18, 38, 13, 17, 91,  1, 20,  1,
  2867.      28,  9, 17, 91, 19, 20,  1, 41, 33, 26,
  2868.      91, 91, 11, 91, 91, 91, 91, 91,
  2869.     };
  2870.   register int hval = len ;
  2871.  
  2872.   switch (hval)
  2873.     {
  2874.       default:
  2875.       case 3:
  2876.         hval += hash_table[str[2]];
  2877.       case 2:
  2878.       case 1:
  2879.         hval += hash_table[str[0]];
  2880.     }
  2881.   return hval + hash_table[str[len - 1]] ;
  2882. }
  2883.  
  2884. #ifdef __GNUC__
  2885. inline
  2886. #endif
  2887. struct resword *
  2888. is_reserved_word (str, len)
  2889.      register char *str;
  2890.      register unsigned int len;
  2891. {
  2892.  
  2893.   static struct resword  wordlist[] =
  2894.     {
  2895.       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
  2896.       {"asm",  ASM, NORID},
  2897.       {"",}, 
  2898.       {"__asm",  ASM, NORID},
  2899.       {"",}, 
  2900.       {"__asm__",  ASM, NORID},
  2901.       {"break",  BREAK, NORID},
  2902.       {"__typeof__",  TYPEOF, NORID},
  2903.       {"",}, 
  2904.       {"__alignof__",  ALIGNOF, NORID},
  2905.       {"auto",  SCSPEC, RID_AUTO},
  2906.       {"__attribute__",  ATTRIBUTE, NORID},
  2907.       {"",}, 
  2908.       {"__attribute",  ATTRIBUTE, NORID},
  2909.       {"",}, 
  2910.       {"do",  DO, NORID},
  2911.       {"int",  TYPESPEC, RID_INT},
  2912.       {"",}, 
  2913.       {"extended",  TYPESPEC, RID_EXTENDED,},
  2914.       {"__const",  TYPE_QUAL, RID_CONST},
  2915.       {"",}, 
  2916.       {"__const__",  TYPE_QUAL, RID_CONST},
  2917.       {"__typeof",  TYPEOF, NORID},
  2918.       {"__inline__",  SCSPEC, RID_INLINE},
  2919.       {"__alignof",  ALIGNOF, NORID},
  2920.       {"__inline",  SCSPEC, RID_INLINE},
  2921.       {"__signed__",  TYPESPEC, RID_SIGNED},
  2922.       {"float",  TYPESPEC, RID_FLOAT},
  2923.       {"else",  ELSE, NORID},
  2924.       {"short",  TYPESPEC, RID_SHORT},
  2925.       {"default",  DEFAULT, NORID},
  2926.       {"if",  IF, NORID},
  2927.       {"comp",  TYPESPEC, RID_COMP},
  2928.       {"__signed",  TYPESPEC, RID_SIGNED},
  2929.       {"extern",  SCSPEC, RID_EXTERN},
  2930.       {"char",  TYPESPEC, RID_CHAR},
  2931.       {"typeof",  TYPEOF, NORID},
  2932.       {"typedef",  SCSPEC, RID_TYPEDEF},
  2933.       {"static",  SCSPEC, RID_STATIC},
  2934.       {"case",  CASE, NORID},
  2935.       {"struct",  STRUCT, NORID},
  2936.       {"__volatile__",  TYPE_QUAL, RID_VOLATILE},
  2937.       {"inline",  SCSPEC, RID_INLINE},
  2938.       {"__volatile",  TYPE_QUAL, RID_VOLATILE},
  2939.       {"const",  TYPE_QUAL, RID_CONST},
  2940.       {"enum",  ENUM, NORID},
  2941.       {"goto",  GOTO, NORID},
  2942.       {"while",  WHILE, NORID},
  2943.       {"return",  RETURN, NORID},
  2944.       {"sizeof",  SIZEOF, NORID},
  2945.       {"switch",  SWITCH, NORID},
  2946.       {"continue",  CONTINUE, NORID},
  2947.       {"",}, 
  2948.       {"for",  FOR, NORID},
  2949.       {"",}, {"",}, 
  2950.       {"double",  TYPESPEC, RID_DOUBLE},
  2951.       {"pascal",  TYPE_QUAL, RID_PASCAL,},
  2952.       {"void",  TYPESPEC, RID_VOID},
  2953.       {"",}, 
  2954.       {"volatile",  TYPE_QUAL, RID_VOLATILE},
  2955.       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
  2956.       {"signed",  TYPESPEC, RID_SIGNED},
  2957.       {"",}, {"",}, {"",}, {"",}, 
  2958.       {"unsigned",  TYPESPEC, RID_UNSIGNED},
  2959.       {"",}, {"",}, {"",}, {"",}, 
  2960.       {"register",  SCSPEC, RID_REGISTER},
  2961.       {"",}, {"",}, {"",}, {"",}, {"",}, 
  2962.       {"long",  TYPESPEC, RID_LONG},
  2963.       {"union",  UNION, NORID},
  2964.     };
  2965.  
  2966.   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  2967.     {
  2968.       register int key = hash (str, len);
  2969.  
  2970.       if (key <= MAX_HASH_VALUE && key >= MIN_HASH_VALUE)
  2971.         {
  2972.           register char *s = wordlist[key].name;
  2973.  
  2974.           if (*s == *str && !strcmp (str + 1, s + 1))
  2975.             return &wordlist[key];
  2976.         }
  2977.     }
  2978.   return 0;
  2979. }
  2980. #else /* not APPLE_C */
  2981. /* Data type that represents the GNU C reserved words. */
  2982. struct resword { char *name; short token; enum rid rid; };
  2983.  
  2984. #define MIN_WORD_LENGTH     2      /* minimum size for C keyword */
  2985. #define MAX_WORD_LENGTH     13     /* maximum size for C keyword */
  2986. #define MIN_HASH_VALUE      7      /* range of the hash keys values  */
  2987. #define MAX_HASH_VALUE      91     /* for the perfect hash generator */
  2988. #define NORID RID_UNUSED
  2989.  
  2990. /* This function performs the minimum-perfect hash mapping from input
  2991.    string to reswords table index.  It only looks at the first and
  2992.    last characters in the string, thus assuring the O(1) lookup time
  2993.    (this keeps our constant down to an insignificant amount!).  Compiling
  2994.    the following 2 functions as inline removes all overhead of the
  2995.    function calls. */
  2996.  
  2997. #ifdef __GNUC__
  2998. __inline
  2999. #endif
  3000. static int
  3001. hash (str, len)
  3002.      register char *str;
  3003.      register int len;
  3004. {
  3005. /* This table is used to build the hash table index that recognizes
  3006.    reserved words in 0(1) steps.  It is larger than strictly necessary,
  3007.    but I'm trading off the space for the time-saving luxury of avoiding
  3008.    subtraction of an offset.  All those ``91's'' (actually just a
  3009.    short-hand for MAX_HASH_VALUE #defined above) are used to speed up
  3010.    the search when the string found on the input stream doesn't have a
  3011.    first or last character that is part of the set of alphabetic
  3012.    characters that comprise the first or last characters in C
  3013.    reserved words. */
  3014.  
  3015.   static int hash_table[] =
  3016.     {
  3017.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  3018.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  3019.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  3020.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  3021.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  3022.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  3023.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  3024.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  3025.      91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
  3026.      91, 91, 91, 91, 91,  1, 91,  2,  1, 32,
  3027.       7,  5, 18, 20,  1, 17, 91,  1, 18,  1,
  3028.      28,  1, 23, 91, 12, 20,  1, 41,  7, 15,
  3029.      91, 91, 10, 91, 91, 91, 91, 91,
  3030.     };
  3031.   register int hval = len ;
  3032.  
  3033.   switch (hval)
  3034.     {
  3035.       default:
  3036.       case 3:
  3037.         hval += hash_table[str[2]];
  3038.       case 2:
  3039.       case 1:
  3040.         return hval + hash_table[str[0]] + hash_table[str[len - 1]];
  3041.     }
  3042. }
  3043.  
  3044. /* This routine attempts to match the string found in the reswords table
  3045.    with the one from the input stream.  If all the relevant details
  3046.    match then an actual strcmp comparison is performed and the address of
  3047.    correct struct resword entry is returned.  Otherwise, a NULL
  3048.    pointer is returned. */
  3049.  
  3050. #ifdef __GNUC__
  3051. __inline
  3052. #endif
  3053. struct resword *
  3054. is_reserved_word (str, len)
  3055.      register char *str;
  3056.      register int len;
  3057. {
  3058.   /* This is the hash table of keywords.
  3059.      The order of keywords has been chosen for perfect hashing.
  3060.      Therefore, this table cannot be updated by hand.
  3061.      Use the program ``gperf,'' available with the latest libg++
  3062.      distribution, to generate an updated table.  A file called
  3063.      c-parse.gperf, distributed with GNU C, contains the keyword file.  */
  3064.  
  3065.   static struct resword reswords[] =
  3066.     {
  3067.       { "", }, { "", }, { "", }, { "", }, { "", }, { "", }, { "", }, 
  3068.       {"asm",  ASM, NORID },
  3069.       {"auto",  SCSPEC, RID_AUTO },
  3070.       {"__asm",  ASM, NORID },
  3071.       {"do",  DO, NORID },
  3072.       {"__asm__",  ASM, NORID },
  3073.       {"break",  BREAK, NORID },
  3074.       {"__typeof__",  TYPEOF, NORID },
  3075.       { "", }, 
  3076.       {"__alignof__",  ALIGNOF, NORID },
  3077.       { "", }, 
  3078.       {"__attribute__",  ATTRIBUTE, NORID },
  3079.       { "", }, 
  3080.       {"__attribute",  ATTRIBUTE, NORID },
  3081.       { "", }, 
  3082.       {"__volatile__",  TYPE_QUAL, RID_VOLATILE },
  3083.       {"int",  TYPESPEC, RID_INT },
  3084.       {"__volatile",  TYPE_QUAL, RID_VOLATILE },
  3085.       { "", }, 
  3086.       {"float",  TYPESPEC, RID_FLOAT },
  3087.       {"goto",  GOTO, NORID },
  3088.       {"short",  TYPESPEC, RID_SHORT },
  3089.       {"__typeof",  TYPEOF, NORID },
  3090.       {"__inline__",  SCSPEC, RID_INLINE },
  3091.       {"__alignof",  ALIGNOF, NORID },
  3092.       {"__inline",  SCSPEC, RID_INLINE },
  3093.       {"__signed__",  TYPESPEC, RID_SIGNED },
  3094.       {"default",  DEFAULT, NORID },
  3095.       {"else",  ELSE, NORID },
  3096.       {"void",  TYPESPEC, RID_VOID },
  3097.       {"__signed",  TYPESPEC, RID_SIGNED },
  3098.       {"if",  IF, NORID },
  3099.       {"volatile",  TYPE_QUAL, RID_VOLATILE },
  3100.       {"struct",  STRUCT, NORID },
  3101.       {"extern",  SCSPEC, RID_EXTERN },
  3102.       {"__const",  TYPE_QUAL, RID_CONST },
  3103.       {"while",  WHILE, NORID },
  3104.       {"__const__",  TYPE_QUAL, RID_CONST },
  3105.       {"switch",  SWITCH, NORID },
  3106.       {"for",  FOR, NORID },
  3107.       {"inline",  SCSPEC, RID_INLINE },
  3108.       {"return",  RETURN, NORID },
  3109.       {"typeof",  TYPEOF, NORID },
  3110.       {"typedef",  SCSPEC, RID_TYPEDEF },
  3111.       {"char",  TYPESPEC, RID_CHAR },
  3112.       {"enum",  ENUM, NORID },
  3113.       {"register",  SCSPEC, RID_REGISTER },
  3114.       {"signed",  TYPESPEC, RID_SIGNED },
  3115.       {"sizeof",  SIZEOF, NORID },
  3116.       { "", }, { "", }, { "", }, { "", }, 
  3117.       {"double",  TYPESPEC, RID_DOUBLE },
  3118.       {"static",  SCSPEC, RID_STATIC },
  3119.       {"case",  CASE, NORID },
  3120.       { "", }, { "", }, { "", }, { "", }, 
  3121.       {"const",  TYPE_QUAL, RID_CONST },
  3122.       { "", }, { "", }, { "", }, 
  3123.       {"long",  TYPESPEC, RID_LONG },
  3124.       { "", }, { "", }, 
  3125.       {"continue",  CONTINUE, NORID },
  3126.       { "", }, { "", }, 
  3127.       {"unsigned",  TYPESPEC, RID_UNSIGNED },
  3128.       { "", }, { "", }, { "", }, { "", }, { "", }, { "", }, { "", }, { "", }, { "", }, 
  3129.       { "", }, { "", }, { "", }, { "", }, { "", }, 
  3130.       {"union",  UNION, NORID },
  3131.     };
  3132.  
  3133.   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  3134.     {
  3135.       register int key = hash (str, len);
  3136.  
  3137.       if (key <= MAX_HASH_VALUE)
  3138.         {
  3139.           register char *s = reswords[key].name;
  3140.  
  3141.           if (*s == *str && !strcmp (str + 1, s + 1))
  3142.             return &reswords[key];
  3143.         }
  3144.     }
  3145.   return 0;
  3146. }
  3147. #endif /* APPLE_C */
  3148.  
  3149. /* The elements of `ridpointers' are identifier nodes
  3150.    for the reserved type names and storage classes.
  3151.    It is indexed by a RID_... value.  */
  3152.  
  3153. tree ridpointers[(int) RID_MAX];
  3154.  
  3155. int check_newline ();
  3156.  
  3157. void
  3158. init_lex ()
  3159. {
  3160.   /* Start it at 0, because check_newline is called at the very beginning
  3161.      and will increment it to 1.  */
  3162.   lineno = 0;
  3163.  
  3164.   maxtoken = 40;
  3165.   token_buffer = (char *) xmalloc (maxtoken + 2);
  3166.   max_wide = 40;
  3167.   wide_buffer = (int *) xmalloc (max_wide + 1);
  3168.  
  3169.   ridpointers[(int) RID_INT] = get_identifier ("int");
  3170.   ridpointers[(int) RID_CHAR] = get_identifier ("char");
  3171.   ridpointers[(int) RID_VOID] = get_identifier ("void");
  3172.   ridpointers[(int) RID_FLOAT] = get_identifier ("float");
  3173.   ridpointers[(int) RID_DOUBLE] = get_identifier ("double");
  3174.   ridpointers[(int) RID_SHORT] = get_identifier ("short");
  3175.   ridpointers[(int) RID_LONG] = get_identifier ("long");
  3176.   ridpointers[(int) RID_UNSIGNED] = get_identifier ("unsigned");
  3177.   ridpointers[(int) RID_SIGNED] = get_identifier ("signed");
  3178.   ridpointers[(int) RID_INLINE] = get_identifier ("inline");
  3179.   ridpointers[(int) RID_CONST] = get_identifier ("const");
  3180.   ridpointers[(int) RID_VOLATILE] = get_identifier ("volatile");
  3181.   ridpointers[(int) RID_AUTO] = get_identifier ("auto");
  3182.   ridpointers[(int) RID_STATIC] = get_identifier ("static");
  3183.   ridpointers[(int) RID_EXTERN] = get_identifier ("extern");
  3184.   ridpointers[(int) RID_TYPEDEF] = get_identifier ("typedef");
  3185.   ridpointers[(int) RID_REGISTER] = get_identifier ("register");
  3186. #ifdef APPLE_C
  3187.   /* Add Apple-defined keywords to the table. */
  3188.   ridpointers[(int) RID_COMP] = get_identifier ("comp"); 
  3189.   ridpointers[(int) RID_EXTENDED] = get_identifier ("extended");
  3190.   ridpointers[(int) RID_PASCAL] = get_identifier ("pascal");
  3191.   initparameter();
  3192. #endif /* APPLE_C */
  3193. }
  3194.  
  3195. static void
  3196. reinit_parse_for_function ()
  3197. {
  3198. }
  3199.  
  3200. /* If C is not whitespace, return C.
  3201.    Otherwise skip whitespace and return first nonwhite char read.  */
  3202.  
  3203. static int
  3204. skip_white_space (c)
  3205.      register int c;
  3206. {
  3207. #if 0
  3208.   register int inside;
  3209. #endif
  3210.  
  3211.   for (;;)
  3212.     {
  3213.       switch (c)
  3214.     {
  3215.       /* Don't recognize comments in cc1: all comments are removed by cpp,
  3216.          and cpp output can include / and * consecutively as operators.  */
  3217. #if 0
  3218.     case '/':
  3219.       c = getc (finput);
  3220.       if (c != '*')
  3221.         {
  3222.           ungetc (c, finput);
  3223.           return '/';
  3224.         }
  3225.  
  3226.       c = getc (finput);
  3227.  
  3228.       inside = 1;
  3229.       while (inside)
  3230.         {
  3231.           if (c == '*')
  3232.         {
  3233.           while (c == '*')
  3234.             c = getc (finput);
  3235.  
  3236.           if (c == '/')
  3237.             {
  3238.               inside = 0;
  3239.               c = getc (finput);
  3240.             }
  3241.         }
  3242.           else if (c == '\n')
  3243.         {
  3244.           lineno++;
  3245.           c = getc (finput);
  3246.         }
  3247.           else if (c == EOF)
  3248.         {
  3249.           error ("unterminated comment");
  3250.           break;
  3251.         }
  3252.           else
  3253.         c = getc (finput);
  3254.         }
  3255.  
  3256.       break;
  3257. #endif
  3258.  
  3259.     case '\n':
  3260.       c = check_newline ();
  3261.       break;
  3262.  
  3263.     case ' ':
  3264.     case '\t':
  3265.     case '\f':
  3266.     case '\r':
  3267.     case '\v':
  3268.     case '\b':
  3269.       c = getc (finput);
  3270.       break;
  3271.  
  3272.     case '\\':
  3273.       c = getc (finput);
  3274.       if (c == '\n')
  3275.         lineno++;
  3276.       else
  3277.         error ("stray '\\' in program");
  3278.       c = getc (finput);
  3279.       break;
  3280.  
  3281.     default:
  3282.       return (c);
  3283.     }
  3284.     }
  3285. }
  3286.  
  3287.  
  3288.  
  3289. /* Make the token buffer longer, preserving the data in it.
  3290.    P should point to just beyond the last valid character in the old buffer.
  3291.    The value we return is a pointer to the new buffer
  3292.    at a place corresponding to P.  */
  3293.  
  3294. static char *
  3295. extend_token_buffer (p)
  3296.      char *p;
  3297. {
  3298.   int offset = p - token_buffer;
  3299.  
  3300.   maxtoken = maxtoken * 2 + 10;
  3301.   token_buffer = (char *) xrealloc (token_buffer, maxtoken + 2);
  3302.  
  3303.   return token_buffer + offset;
  3304. }
  3305.  
  3306. /* At the beginning of a line, increment the line number
  3307.    and process any #-directive on this line.
  3308.    If the line is a #-directive, read the entire line and return a newline.
  3309.    Otherwise, return the line's first non-whitespace character.  */
  3310.  
  3311. int
  3312. check_newline ()
  3313. {
  3314.   register int c;
  3315.   register int token;
  3316.  
  3317.   lineno++;
  3318.  
  3319.   /* Read first nonwhite char on the line.  */
  3320.  
  3321.   c = getc (finput);
  3322.   while (c == ' ' || c == '\t')
  3323.     c = getc (finput);
  3324.  
  3325.   if (c != '#')
  3326.     {
  3327.       /* If not #, return it so caller will use it.  */
  3328.       return c;
  3329.     }
  3330.  
  3331.   /* Read first nonwhite char after the `#'.  */
  3332.  
  3333.   c = getc (finput);
  3334.   while (c == ' ' || c == '\t')
  3335.     c = getc (finput);
  3336.  
  3337.   /* If a letter follows, then if the word here is `line', skip
  3338.      it and ignore it; otherwise, ignore the line, with an error
  3339.      if the word isn't `pragma'.  */
  3340.  
  3341.   if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
  3342.     {
  3343.       if (c == 'p')
  3344.     {
  3345.       if (getc (finput) == 'r'
  3346.           && getc (finput) == 'a'
  3347.           && getc (finput) == 'g'
  3348.           && getc (finput) == 'm'
  3349.           && getc (finput) == 'a'
  3350.           && ((c = getc (finput)) == ' ' || c == '\t' || c == '\n'))
  3351. #ifdef APPLE_C
  3352.         /* Have to handle assorted pragmas defined by Apple. */
  3353.         {
  3354.         char c2 = getc (finput);
  3355.  
  3356.         switch (c2) {
  3357.         case 'd':
  3358.               if (getc (finput) == 'u'
  3359.                 && getc (finput) == 'm'
  3360.                 && getc (finput) == 'p')
  3361.               {
  3362.                 warning ("Don't know how to dump precompiled info");
  3363.                 goto skipline;
  3364.               }
  3365.             break;
  3366.         case 'l':
  3367.               if (getc (finput) == 'o'
  3368.                 && getc (finput) == 'a'
  3369.                 && getc (finput) == 'd')
  3370.               {
  3371.                 warning ("Don't know how to load precompiled info");
  3372.                 goto skipline;
  3373.               }
  3374.             break;
  3375.         case 'p':
  3376.               if (getc (finput) == 'a'
  3377.                 && getc (finput) == 'r'
  3378.                 && getc (finput) == 'a'
  3379.                 && getc (finput) == 'm'
  3380.                 && getc (finput) == 'e'
  3381.                 && getc (finput) == 't'
  3382.                 && getc (finput) == 'e'
  3383.                 && getc (finput) == 'r'
  3384.                 && getc (finput) == ' ')
  3385.               {
  3386.                 /*warning ("Parameter pragma being ignored!");*/
  3387.                 c = parseparam();
  3388.                 goto skipline;
  3389.               }
  3390.             break;
  3391.         case 's':
  3392.               if (getc (finput) == 'e'
  3393.                 && getc (finput) == 'g'
  3394.                 && getc (finput) == 'm'
  3395.                 && getc (finput) == 'e'
  3396.                 && getc (finput) == 'n'
  3397.                 && getc (finput) == 't'
  3398.                 && getc (finput) == ' ')
  3399.               {
  3400.                 /* now pick up the segment name and jam it */
  3401.                 replace_segment_name(finput);
  3402.                 goto skipline;
  3403.               }
  3404.             break;
  3405.         case 't':
  3406.               if (getc (finput) == 'r'
  3407.                 && getc (finput) == 'a'
  3408.                 && getc (finput) == 'c'
  3409.                 && getc (finput) == 'e'
  3410.                 && getc (finput) == ' ')
  3411.               {
  3412.                 if (getc (finput) == 'o')
  3413.                   {
  3414.                     char c2 = getc (finput);
  3415.                     
  3416.                     if (c2 == 'n')
  3417.                       { if (!ignore_trace_pragmas) generate_trace_calls = 1; }
  3418.                     else if (c2 == 'f')
  3419.                       { if (!ignore_trace_pragmas) generate_trace_calls = 0; }
  3420.                     else
  3421.                       goto skipline  /* error instead? */ ;
  3422.                   }
  3423.                 goto skipline;
  3424.               }
  3425.             break;
  3426.         case 'u':
  3427.               if (getc (finput) == 'n'
  3428.                 && getc (finput) == 'u'
  3429.                 && getc (finput) == 's'
  3430.                 && getc (finput) == 'e'
  3431.                 && getc (finput) == 'd')
  3432.               {
  3433.                 /* anything to do here? */
  3434.                 goto skipline;
  3435.               }
  3436.             break;
  3437.         default:
  3438.             break;
  3439.         }
  3440.         goto skipline;
  3441.         }
  3442. #else
  3443.         goto skipline;
  3444. #endif /* APPLE_C */
  3445.     }
  3446.  
  3447.       else if (c == 'l')
  3448.     {
  3449.       if (getc (finput) == 'i'
  3450.           && getc (finput) == 'n'
  3451.           && getc (finput) == 'e'
  3452.           && ((c = getc (finput)) == ' ' || c == '\t'))
  3453.         goto linenum;
  3454.     }
  3455.       else if (c == 'i')
  3456.     {
  3457.       if (getc (finput) == 'd'
  3458.           && getc (finput) == 'e'
  3459.           && getc (finput) == 'n'
  3460.           && getc (finput) == 't'
  3461.           && ((c = getc (finput)) == ' ' || c == '\t'))
  3462.         {
  3463.           extern FILE *asm_out_file;
  3464.  
  3465.           if (pedantic)
  3466.         error ("ANSI C does not allow #ident");
  3467.  
  3468.           /* Here we have just seen `#ident '.
  3469.          A string constant should follow.  */
  3470.  
  3471.           while (c == ' ' || c == '\t')
  3472.         c = getc (finput);
  3473.  
  3474.           /* If no argument, ignore the line.  */
  3475.           if (c == '\n')
  3476.         return c;
  3477.  
  3478.           ungetc (c, finput);
  3479.           token = yylex ();
  3480.           if (token != STRING
  3481.           || TREE_CODE (yylval.ttype) != STRING_CST)
  3482.         {
  3483.           error ("invalid #ident");
  3484.           goto skipline;
  3485.         }
  3486.  
  3487. #ifdef ASM_OUTPUT_IDENT
  3488.           ASM_OUTPUT_IDENT (asm_out_file, TREE_STRING_POINTER (yylval.ttype));
  3489. #endif
  3490.  
  3491.           /* Skip the rest of this line.  */
  3492.           goto skipline;
  3493.         }
  3494.     }
  3495.  
  3496.       error ("undefined or invalid # directive");
  3497.       goto skipline;
  3498.     }
  3499.  
  3500. linenum:
  3501.   /* Here we have either `#line' or `# <nonletter>'.
  3502.      In either case, it should be a line number; a digit should follow.  */
  3503.  
  3504.   while (c == ' ' || c == '\t')
  3505.     c = getc (finput);
  3506.  
  3507.   /* If the # is the only nonwhite char on the line,
  3508.      just ignore it.  Check the new newline.  */
  3509.   if (c == '\n')
  3510.     return c;
  3511.  
  3512.   /* Something follows the #; read a token.  */
  3513.  
  3514.   ungetc (c, finput);
  3515.   token = yylex ();
  3516.  
  3517.   if (token == CONSTANT
  3518.       && TREE_CODE (yylval.ttype) == INTEGER_CST)
  3519.     {
  3520.       int old_lineno = lineno;
  3521.       /* subtract one, because it is the following line that
  3522.      gets the specified number */
  3523.  
  3524.       int l = TREE_INT_CST_LOW (yylval.ttype) - 1;
  3525.  
  3526.       /* Is this the last nonwhite stuff on the line?  */
  3527.       c = getc (finput);
  3528.       while (c == ' ' || c == '\t')
  3529.     c = getc (finput);
  3530.       if (c == '\n')
  3531.     {
  3532.       /* No more: store the line number and check following line.  */
  3533.       lineno = l;
  3534.       return c;
  3535.     }
  3536.       ungetc (c, finput);
  3537.  
  3538.       /* More follows: it must be a string constant (filename).  */
  3539.  
  3540.       token = yylex ();
  3541.       if (token != STRING || TREE_CODE (yylval.ttype) != STRING_CST)
  3542.     {
  3543.       error ("invalid #line");
  3544.       goto skipline;
  3545.     }
  3546.  
  3547.       input_filename
  3548.     = (char *) permalloc (TREE_STRING_LENGTH (yylval.ttype) + 1);
  3549.       strcpy (input_filename, TREE_STRING_POINTER (yylval.ttype));
  3550.       lineno = l;
  3551.  
  3552.       if (main_input_filename == 0)
  3553.     main_input_filename = input_filename;
  3554.  
  3555.       /* Is this the last nonwhite stuff on the line?  */
  3556.       c = getc (finput);
  3557.       while (c == ' ' || c == '\t')
  3558.     c = getc (finput);
  3559.       if (c == '\n')
  3560.     return c;
  3561.       ungetc (c, finput);
  3562.  
  3563.       token = yylex ();
  3564.  
  3565.       /* `1' after file name means entering new file.
  3566.      `2' after file name means just left a file.  */
  3567.  
  3568.       if (token == CONSTANT
  3569.       && TREE_CODE (yylval.ttype) == INTEGER_CST)
  3570.     {
  3571.       if (TREE_INT_CST_LOW (yylval.ttype) == 1)
  3572.         {
  3573.           struct file_stack *p
  3574.         = (struct file_stack *) xmalloc (sizeof (struct file_stack));
  3575.           input_file_stack->line = old_lineno;
  3576.           p->next = input_file_stack;
  3577.           p->name = input_filename;
  3578.           input_file_stack = p;
  3579.           input_file_stack_tick++;
  3580.         }
  3581.       else if (input_file_stack->next)
  3582.         {
  3583.           struct file_stack *p = input_file_stack;
  3584.           input_file_stack = p->next;
  3585.           free (p);
  3586.           input_file_stack_tick++;
  3587.         }
  3588.       else
  3589.         error ("#-lines for entering and leaving files don't match");
  3590.     }
  3591.     }
  3592.   else
  3593.     error ("invalid #-line");
  3594.  
  3595.   /* skip the rest of this line.  */
  3596.  skipline:
  3597.   if (c == '\n')
  3598.     return c;
  3599.   while ((c = getc (finput)) != EOF && c != '\n');
  3600.   return c;
  3601. }
  3602.  
  3603. #ifndef isalnum
  3604. #define isalnum(char) ((char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z') || (char >= '0' && char <= '9'))
  3605. #endif
  3606. #ifndef isdigit
  3607. #define isdigit(char) (char >= '0' && char <= '9')
  3608. #endif
  3609. #define ENDFILE -1  /* token that represents end-of-file */
  3610.  
  3611.  
  3612. static int
  3613. readescape ()
  3614. {
  3615.   register int c = getc (finput);
  3616.   register int count, code;
  3617.   int firstdig;
  3618.  
  3619.   switch (c)
  3620.     {
  3621.     case 'x':
  3622.       code = 0;
  3623.       count = 0;
  3624.       while (1)
  3625.     {
  3626.       c = getc (finput);
  3627.       if (!(c >= 'a' && c <= 'f')
  3628.           && !(c >= 'A' && c <= 'F')
  3629.           && !(c >= '0' && c <= '9'))
  3630.         {
  3631.           ungetc (c, finput);
  3632.           break;
  3633.         }
  3634.       code *= 16;
  3635.       if (c >= 'a' && c <= 'f')
  3636.         code += c - 'a' + 10;
  3637.       if (c >= 'A' && c <= 'F')
  3638.         code += c - 'A' + 10;
  3639.       if (c >= '0' && c <= '9')
  3640.         code += c - '0';
  3641.       if (count == 0)
  3642.         firstdig = code;
  3643.       count++;
  3644.     }
  3645.       if (count == 0)
  3646.     error ("\\x used with no following hex digits");
  3647.       else if ((count - 1) * 4 >= TYPE_PRECISION (integer_type_node)
  3648.            || ((1 << (TYPE_PRECISION (integer_type_node) - (count - 1) * 4))
  3649.            <= firstdig))
  3650.     warning ("hex escape out of range");
  3651.       return code;
  3652.  
  3653.     case '0':  case '1':  case '2':  case '3':  case '4':
  3654.     case '5':  case '6':  case '7':
  3655.       code = 0;
  3656.       count = 0;
  3657.       while ((c <= '7') && (c >= '0') && (count++ < 3))
  3658.     {
  3659.       code = (code * 8) + (c - '0');
  3660.       c = getc (finput);
  3661.     }
  3662.       ungetc (c, finput);
  3663.       return code;
  3664.  
  3665.     case '\\': case '\'': case '"':
  3666.       return c;
  3667.  
  3668.     case '\n':
  3669.       lineno++;
  3670.       return -1;
  3671.  
  3672.     case 'n':
  3673.       return TARGET_NEWLINE;
  3674.  
  3675.     case 't':
  3676.       return TARGET_TAB;
  3677.  
  3678.     case 'r':
  3679.       return TARGET_CR;
  3680.  
  3681.     case 'f':
  3682.       return TARGET_FF;
  3683.  
  3684.     case 'b':
  3685.       return TARGET_BS;
  3686.  
  3687.     case 'a':
  3688.       return TARGET_BELL;
  3689.  
  3690.     case 'v':
  3691.       return TARGET_VT;
  3692.  
  3693.     case 'E':
  3694.       return 033;
  3695. #ifdef APPLE_C
  3696.     /* backslash-p needs to return a special code so that the string
  3697.        constructor can leave a hole and patch in the string length later. */
  3698.     /* (What happens if this char appears in a char constant?) */
  3699.     case 'p':
  3700.       return -2;
  3701. #endif /* APPLE_C */
  3702.  
  3703.     case '?':
  3704.       /* `\(', etc, are used at beginning of line to avoid confusing Emacs.  */
  3705.     case '(':
  3706.     case '{':
  3707.     case '[':
  3708.       return c;
  3709.     }
  3710.   if (c >= 040 && c <= 0177)
  3711.     warning ("unknown escape sequence `\\%c'", c);
  3712.   else
  3713.     warning ("unknown escape sequence: `\\' followed by char code 0x%x", c);
  3714.   return c;
  3715. }
  3716.  
  3717. void
  3718. yyerror (string)
  3719.      char *string;
  3720. {
  3721.   char buf[200];
  3722.  
  3723.   strcpy (buf, string);
  3724.  
  3725.   /* We can't print string and character constants well
  3726.      because the token_buffer contains the result of processing escapes.  */
  3727.   if (end_of_file)
  3728.     strcat (buf, " at end of input");
  3729.   else if (token_buffer[0] == 0)
  3730.     strcat (buf, " at null character");
  3731.   else if (token_buffer[0] == '"')
  3732.     strcat (buf, " before string constant");
  3733.   else if (token_buffer[0] == '\'')
  3734.     strcat (buf, " before character constant");
  3735.   else if (token_buffer[0] < 040 || token_buffer[0] >= 0177)
  3736.     sprintf (buf + strlen (buf), " before character 0%o", token_buffer[0]);
  3737.   else
  3738.     strcat (buf, " before `%s'");
  3739.  
  3740.   error (buf, token_buffer);
  3741. }
  3742.  
  3743. static int nextchar = -1;
  3744.  
  3745. #ifdef MPW
  3746. /* Counter for number of lex tokens seen. */
  3747. int lexspincounter = 0;
  3748. #endif /* MPW */
  3749.  
  3750. static int
  3751. yylex ()
  3752. {
  3753.   register int c;
  3754.   register char *p;
  3755.   register int value;
  3756.   int wide_flag = 0;
  3757.  
  3758. #ifdef MPW
  3759.   /* Don't spin the cursor on every token, but do it quite a bit. */
  3760.   if ((lexspincounter++) % 4 == 0)
  3761.     SpinCursor (1);
  3762. #endif /* MPW */
  3763.  
  3764.   if (nextchar >= 0)
  3765.     c = nextchar, nextchar = -1;
  3766.   else
  3767.     c = getc (finput);
  3768.  
  3769.   /* Effectively do c = skip_white_space (c)
  3770.      but do it faster in the usual cases.  */
  3771.   while (1)
  3772.     switch (c)
  3773.       {
  3774.       case ' ':
  3775.       case '\t':
  3776.       case '\f':
  3777.       case '\r':
  3778.       case '\v':
  3779.       case '\b':
  3780.     c = getc (finput);
  3781.     break;
  3782.  
  3783.       case '\n':
  3784.       case '/':
  3785.       case '\\':
  3786.     c = skip_white_space (c);
  3787.       default:
  3788.     goto found_nonwhite;
  3789.       }
  3790.  found_nonwhite:
  3791.  
  3792.   token_buffer[0] = c;
  3793.   token_buffer[1] = 0;
  3794.  
  3795. /*  yylloc.first_line = lineno; */
  3796.  
  3797.   switch (c)
  3798.     {
  3799.     case EOF:
  3800.       end_of_file = 1;
  3801.       token_buffer[0] = 0;
  3802.       value = ENDFILE;
  3803.       break;
  3804.  
  3805.     case '$':
  3806.       if (dollars_in_ident)
  3807.     goto letter;
  3808.       return '$';
  3809.  
  3810.     case 'L':
  3811.       /* Capital L may start a wide-string or wide-character constant.  */
  3812.       {
  3813.     register int c = getc (finput);
  3814.     if (c == '\'')
  3815.       {
  3816.         wide_flag = 1;
  3817.         goto char_constant;
  3818.       }
  3819.     if (c == '"')
  3820.       {
  3821.         wide_flag = 1;
  3822.         goto string_constant;
  3823.       }
  3824.     ungetc (c, finput);
  3825.       }
  3826.  
  3827.     case 'A':  case 'B':  case 'C':  case 'D':  case 'E':
  3828.     case 'F':  case 'G':  case 'H':  case 'I':  case 'J':
  3829.     case 'K':          case 'M':  case 'N':  case 'O':
  3830.     case 'P':  case 'Q':  case 'R':  case 'S':  case 'T':
  3831.     case 'U':  case 'V':  case 'W':  case 'X':  case 'Y':
  3832.     case 'Z':
  3833.     case 'a':  case 'b':  case 'c':  case 'd':  case 'e':
  3834.     case 'f':  case 'g':  case 'h':  case 'i':  case 'j':
  3835.     case 'k':  case 'l':  case 'm':  case 'n':  case 'o':
  3836.     case 'p':  case 'q':  case 'r':  case 's':  case 't':
  3837.     case 'u':  case 'v':  case 'w':  case 'x':  case 'y':
  3838.     case 'z':
  3839.     case '_':
  3840.     letter:
  3841.       p = token_buffer;
  3842.       while (isalnum (c) || c == '_' || c == '$')
  3843.     {
  3844.       if (p >= token_buffer + maxtoken)
  3845.         p = extend_token_buffer (p);
  3846.       if (c == '$' && ! dollars_in_ident)
  3847.         break;
  3848.  
  3849.       *p++ = c;
  3850.       c = getc (finput);
  3851.     }
  3852.  
  3853.       *p = 0;
  3854.       nextchar = c;
  3855.  
  3856.       value = IDENTIFIER;
  3857.       yylval.itype = 0;
  3858.  
  3859.       /* Try to recognize a keyword.  Uses minimum-perfect hash function */
  3860.  
  3861.       {
  3862.     register struct resword *ptr;
  3863.  
  3864.     if (ptr = is_reserved_word (token_buffer, p - token_buffer))
  3865.       {
  3866.         if (ptr->rid)
  3867.           yylval.ttype = ridpointers[(int) ptr->rid];
  3868.         if ((! flag_no_asm
  3869.          /* -fno-asm means don't recognize the non-ANSI keywords.  */
  3870.          || ((int) ptr->token != ASM
  3871.              && (int) ptr->token != TYPEOF
  3872.              && ptr->rid != RID_INLINE)
  3873.          /* Recognize __asm and __inline despite -fno-asm.  */
  3874.          || token_buffer[0] == '_')
  3875.         /* -ftraditional means don't recognize nontraditional keywords
  3876.            typeof, const, volatile, signed or inline.  */
  3877.         && (! flag_traditional
  3878.             || ((int) ptr->token != TYPE_QUAL
  3879.             && (int) ptr->token != TYPEOF
  3880.             && ptr->rid != RID_SIGNED
  3881.             && ptr->rid != RID_INLINE)
  3882.             /* Recognize __inline, etc. despite -ftraditional.  */
  3883.             || token_buffer[0] == '_'))
  3884.           value = (int) ptr->token;
  3885.       }
  3886.       }
  3887.  
  3888.       /* If we did not find a keyword, look for an identifier
  3889.      (or a typename).  */
  3890.  
  3891.       if (value == IDENTIFIER)
  3892.     {
  3893.           yylval.ttype = get_identifier (token_buffer);
  3894.       lastiddecl = lookup_name (yylval.ttype);
  3895.  
  3896.       if (lastiddecl != 0 && TREE_CODE (lastiddecl) == TYPE_DECL)
  3897.         value = TYPENAME;
  3898.     }
  3899.  
  3900.       break;
  3901.  
  3902.     case '0':  case '1':  case '2':  case '3':  case '4':
  3903.     case '5':  case '6':  case '7':  case '8':  case '9':
  3904.     case '.':
  3905.       {
  3906.     int base = 10;
  3907.     int count = 0;
  3908.     int largest_digit = 0;
  3909.     int numdigits = 0;
  3910.     /* for multi-precision arithmetic,
  3911.        we store only 8 live bits in each short,
  3912.        giving us 64 bits of reliable precision */
  3913.     short shorts[8];
  3914.     int overflow = 0;
  3915.  
  3916.     enum anon1 { NOT_FLOAT, AFTER_POINT, TOO_MANY_POINTS} floatflag
  3917.       = NOT_FLOAT;
  3918.  
  3919.     for (count = 0; count < 8; count++)
  3920.       shorts[count] = 0;
  3921.  
  3922.     p = token_buffer;
  3923.     *p++ = c;
  3924.  
  3925.     if (c == '0')
  3926.       {
  3927.         *p++ = (c = getc (finput));
  3928.         if ((c == 'x') || (c == 'X'))
  3929.           {
  3930.         base = 16;
  3931.         *p++ = (c = getc (finput));
  3932.           }
  3933.         else
  3934.           {
  3935.         base = 8;
  3936.         numdigits++;
  3937.           }
  3938.       }
  3939.  
  3940.     /* Read all the digits-and-decimal-points.  */
  3941.  
  3942.     while (c == '.'
  3943.            || (isalnum (c) && (c != 'l') && (c != 'L')
  3944.            && (c != 'u') && (c != 'U')
  3945.            && (floatflag == NOT_FLOAT || ((c != 'f') && (c != 'F')))))
  3946.       {
  3947.         if (c == '.')
  3948.           {
  3949.         if (base == 16)
  3950.           error ("floating constant may not be in radix 16");
  3951.         if (floatflag == AFTER_POINT)
  3952.           {
  3953.             error ("malformed floating constant");
  3954.             floatflag = TOO_MANY_POINTS;
  3955.           }
  3956.         else
  3957.           floatflag = AFTER_POINT;
  3958.  
  3959.         base = 10;
  3960.         *p++ = c = getc (finput);
  3961.         /* Accept '.' as the start of a floating-point number
  3962.            only when it is followed by a digit.
  3963.            Otherwise, unread the following non-digit
  3964.            and use the '.' as a structural token.  */
  3965.         if (p == token_buffer + 2 && !isdigit (c))
  3966.           {
  3967.             if (c == '.')
  3968.               {
  3969.             c = getc (finput);
  3970.             if (c == '.')
  3971.               {
  3972.                 *p++ = c;
  3973.                 *p = 0;
  3974.                 return ELLIPSIS;
  3975.               }
  3976.             error ("parse error at `..'");
  3977.               }
  3978.             ungetc (c, finput);
  3979.             token_buffer[1] = 0;
  3980.             value = '.';
  3981.             goto done;
  3982.           }
  3983.           }
  3984.         else
  3985.           {
  3986.         /* It is not a decimal point.
  3987.            It should be a digit (perhaps a hex digit).  */
  3988.  
  3989.         if (isdigit (c))
  3990.           {
  3991.             c = c - '0';
  3992.           }
  3993.         else if (base <= 10)
  3994.           {
  3995.             if ((c&~040) == 'E')
  3996.               {
  3997.             base = 10;
  3998.             floatflag = AFTER_POINT;
  3999.             break;   /* start of exponent */
  4000.               }
  4001.             error ("nondigits in number and not hexadecimal");
  4002.             c = 0;
  4003.           }
  4004.         else if (c >= 'a')
  4005.           {
  4006.             c = c - 'a' + 10;
  4007.           }
  4008.         else
  4009.           {
  4010.             c = c - 'A' + 10;
  4011.           }
  4012.         if (c >= largest_digit)
  4013.           largest_digit = c;
  4014.         numdigits++;
  4015.  
  4016.         for (count = 0; count < 8; count++)
  4017.           {
  4018.             shorts[count] *= base;
  4019.             if (count)
  4020.               {
  4021.             shorts[count] += (shorts[count-1] >> 8);
  4022.             shorts[count-1] &= (1<<8)-1;
  4023.               }
  4024.             else shorts[0] += c;
  4025.           }
  4026.  
  4027.         if (shorts[7] >= 1<<8
  4028.             || shorts[7] < - (1 << 8))
  4029.           overflow = TRUE;
  4030.  
  4031.         if (p >= token_buffer + maxtoken - 3)
  4032.           p = extend_token_buffer (p);
  4033.         *p++ = (c = getc (finput));
  4034.           }
  4035.       }
  4036.  
  4037.     if (numdigits == 0)
  4038.       error ("numeric constant with no digits");
  4039.  
  4040.     if (largest_digit >= base)
  4041.       error ("numeric constant contains digits beyond the radix");
  4042.  
  4043.     /* Remove terminating char from the token buffer and delimit the string */
  4044.     *--p = 0;
  4045.  
  4046.     if (floatflag != NOT_FLOAT)
  4047.       {
  4048.         tree type = double_type_node;
  4049.         char f_seen = 0;
  4050.         char l_seen = 0;
  4051.         REAL_VALUE_TYPE value;
  4052.  
  4053.         /* Read explicit exponent if any, and put it in tokenbuf.  */
  4054.  
  4055.         if ((c == 'e') || (c == 'E'))
  4056.           {
  4057.         if (p >= token_buffer + maxtoken - 3)
  4058.           p = extend_token_buffer (p);
  4059.         *p++ = c;
  4060.         c = getc (finput);
  4061.         if ((c == '+') || (c == '-'))
  4062.           {
  4063.             *p++ = c;
  4064.             c = getc (finput);
  4065.           }
  4066.         if (! isdigit (c))
  4067.           error ("floating constant exponent has no digits");
  4068.             while (isdigit (c))
  4069.           {
  4070.             if (p >= token_buffer + maxtoken - 3)
  4071.               p = extend_token_buffer (p);
  4072.             *p++ = c;
  4073.             c = getc (finput);
  4074.           }
  4075.           }
  4076.  
  4077.         *p = 0;
  4078.         errno = 0;
  4079.         value = REAL_VALUE_ATOF (token_buffer);
  4080. #ifdef ERANGE
  4081.         if (errno == ERANGE && !flag_traditional)
  4082.           {
  4083.         char *p1 = token_buffer;
  4084.         /* Check for "0.0" and variants;
  4085.            Sunos 4 spuriously returns ERANGE for them.  */
  4086.         while (*p1 == '0') p1++;
  4087.         if (*p1 == '.')
  4088.           {
  4089.             p1++;
  4090.             while (*p1 == '0') p1++;
  4091.           }
  4092.         if (*p1 == 'e' || *p1 == 'E')
  4093.           {
  4094.             /* with significand==0, ignore the exponent */
  4095.             p1++;
  4096.             while (*p1 != 0) p1++;
  4097.           }
  4098.         /* ERANGE is also reported for underflow,
  4099.            so test the value to distinguish overflow from that.  */
  4100.         if (*p1 != 0 && (value > 1.0 || value < 1.0))
  4101.           warning ("floating point number exceeds range of `double'");
  4102.           }
  4103. #endif
  4104.  
  4105.         /* Read the suffixes to choose a data type.  */
  4106.         while (1)
  4107.           {
  4108.         if (c == 'f' || c == 'F')
  4109.           {
  4110.             float floater;
  4111.             if (f_seen)
  4112.               error ("two `f's in floating constant");
  4113.             f_seen = 1;
  4114.             type = float_type_node;
  4115.             floater = value;
  4116.             value = floater;
  4117.           }
  4118.         else if (c == 'l' || c == 'L')
  4119.           {
  4120.             if (l_seen)
  4121.               error ("two `l's in floating constant");
  4122.             l_seen = 1;
  4123.             type = long_double_type_node;
  4124.           }
  4125.         else
  4126.           {
  4127.             if (isalnum (c))
  4128.               {
  4129.             error ("garbage at end of number");
  4130.             while (isalnum (c))
  4131.               {
  4132.                 if (p >= token_buffer + maxtoken - 3)
  4133.                   p = extend_token_buffer (p);
  4134.                 *p++ = c;
  4135.                 c = getc (finput);
  4136.               }
  4137.               }
  4138.             break;
  4139.           }
  4140.         if (p >= token_buffer + maxtoken - 3)
  4141.           p = extend_token_buffer (p);
  4142.         *p++ = c;
  4143.         c = getc (finput);
  4144.           }
  4145.  
  4146.         /* Create a node with determined type and value.  */
  4147.         yylval.ttype = build_real (type, value);
  4148.  
  4149.         ungetc (c, finput);
  4150.         *p = 0;
  4151.       }
  4152.     else
  4153.       {
  4154.         tree type;
  4155.         int spec_unsigned = 0;
  4156.         int spec_long = 0;
  4157.         int spec_long_long = 0;
  4158.  
  4159.         while (1)
  4160.           {
  4161.         if (c == 'u' || c == 'U')
  4162.           {
  4163.             if (spec_unsigned)
  4164.               error ("two `u's in integer constant");
  4165.             spec_unsigned = 1;
  4166.           }
  4167.         else if (c == 'l' || c == 'L')
  4168.           {
  4169.             if (spec_long)
  4170.               {
  4171.             if (spec_long_long)
  4172.               error ("three `l's in integer constant");
  4173.             else if (pedantic)
  4174.               warning ("ANSI C forbids long long integer constants");
  4175.             spec_long_long = 1;
  4176.               }
  4177.             spec_long = 1;
  4178.           }
  4179.         else
  4180.           {
  4181.             if (isalnum (c))
  4182.               {
  4183.             error ("garbage at end of number");
  4184.             while (isalnum (c))
  4185.               {
  4186.                 if (p >= token_buffer + maxtoken - 3)
  4187.                   p = extend_token_buffer (p);
  4188.                 *p++ = c;
  4189.                 c = getc (finput);
  4190.               }
  4191.               }
  4192.             break;
  4193.           }
  4194.         if (p >= token_buffer + maxtoken - 3)
  4195.           p = extend_token_buffer (p);
  4196.         *p++ = c;
  4197.         c = getc (finput);
  4198.           }
  4199.  
  4200.         ungetc (c, finput);
  4201.  
  4202.         if ((overflow || shorts[7] || shorts[6] || shorts[5] || shorts[4])
  4203.         && !spec_long_long)
  4204.           warning ("integer constant out of range");
  4205.  
  4206.         /* If it won't fit in a signed long long, make it unsigned.
  4207.            We can't distinguish based on the tree node because
  4208.            any integer constant fits any long long type.  */
  4209.         if (shorts[7] >= (1<<8))
  4210.           spec_unsigned = 1;
  4211.  
  4212.         /* This is simplified by the fact that our constant
  4213.            is always positive.  */
  4214.         yylval.ttype
  4215.           = (build_int_2
  4216.          ((shorts[3]<<24) + (shorts[2]<<16) + (shorts[1]<<8) + shorts[0],
  4217.           (spec_long_long
  4218.            ? (shorts[7]<<24) + (shorts[6]<<16) + (shorts[5]<<8) + shorts[4]
  4219.            : 0)));
  4220.  
  4221.         if (!spec_long && !spec_unsigned
  4222.         && int_fits_type_p (yylval.ttype, integer_type_node))
  4223.           type = integer_type_node;
  4224.  
  4225.         else if (!spec_long && base != 10
  4226.              && int_fits_type_p (yylval.ttype, unsigned_type_node))
  4227.           type = unsigned_type_node;
  4228.  
  4229.         else if (!spec_unsigned && !spec_long_long
  4230.              && int_fits_type_p (yylval.ttype, long_integer_type_node))
  4231.           type = long_integer_type_node;
  4232.  
  4233.         else if (! spec_long_long
  4234.              && int_fits_type_p (yylval.ttype,
  4235.                      long_unsigned_type_node))
  4236.           type = long_unsigned_type_node;
  4237.  
  4238.         else if (! spec_unsigned
  4239.              && int_fits_type_p (yylval.ttype,
  4240.                      long_long_integer_type_node))
  4241.           type = long_long_integer_type_node;
  4242.  
  4243.         else if (int_fits_type_p (yylval.ttype,
  4244.                       long_long_unsigned_type_node))
  4245.           type = long_long_unsigned_type_node;
  4246.  
  4247.         else
  4248.           {
  4249.         type = long_long_integer_type_node;
  4250.         warning ("integer constant out of range");
  4251.           }
  4252.  
  4253.         TREE_TYPE (yylval.ttype) = type;
  4254.       }
  4255.  
  4256.     value = CONSTANT; break;
  4257.       }
  4258.  
  4259.     case '\'':
  4260.     char_constant:
  4261.       {
  4262.     register int result = 0;
  4263.     register num_chars = 0;
  4264.     int width = TYPE_PRECISION (char_type_node);
  4265.     int max_chars;
  4266.  
  4267.     if (wide_flag) width = TYPE_PRECISION (integer_type_node);
  4268.  
  4269.     max_chars = TYPE_PRECISION (integer_type_node) / width;
  4270.  
  4271.     while (1)
  4272.       {
  4273.       tryagain:
  4274.  
  4275.         c = getc (finput);
  4276.  
  4277.         if (c == '\'' || c == EOF)
  4278.           break;
  4279.  
  4280.         if (c == '\\')
  4281.           {
  4282.         c = readescape ();
  4283.         if (c < 0)
  4284.           goto tryagain;
  4285.         if (width < HOST_BITS_PER_INT
  4286.             && (unsigned) c >= (1 << width))
  4287.           warning ("escape sequence out of range for character");
  4288.           }
  4289.         else if (c == '\n')
  4290.           {
  4291.         if (pedantic)
  4292.           warning ("ANSI C forbids newline in character constant");
  4293.         lineno++;
  4294.           }
  4295.  
  4296.         num_chars++;
  4297.         if (num_chars > maxtoken - 4)
  4298.           extend_token_buffer (token_buffer);
  4299.  
  4300.         token_buffer[num_chars] = c;
  4301.  
  4302.         /* Merge character into result; ignore excess chars.  */
  4303.         if (num_chars < max_chars + 1)
  4304.           {
  4305.         if (width < HOST_BITS_PER_INT)
  4306.           result = (result << width) | (c & ((1 << width) - 1));
  4307.         else
  4308.           result = c;
  4309.           }
  4310.       }
  4311.  
  4312.     token_buffer[num_chars + 1] = '\'';
  4313.     token_buffer[num_chars + 2] = 0;
  4314.  
  4315.     if (c != '\'')
  4316.       error ("malformatted character constant");
  4317.     else if (num_chars == 0)
  4318.       error ("empty character constant");
  4319.     else if (num_chars > max_chars)
  4320.       {
  4321.         num_chars = max_chars;
  4322.         error ("character constant too long");
  4323.       }
  4324. #ifndef APPLE_C
  4325.     /* Apple C doesn't mind multi-character constants, in fact things
  4326.        like resource IDs are preferred that way. */
  4327.     else if (num_chars != 1 && ! flag_traditional)
  4328.       warning ("multi-character character constant");
  4329. #endif /* APPLE_C */
  4330.  
  4331.     /* If char type is signed, sign-extend the constant.  */
  4332.     if (! wide_flag)
  4333.       {
  4334.         int num_bits = num_chars * width;
  4335.         if (TREE_UNSIGNED (char_type_node)
  4336.         || ((result >> (num_bits - 1)) & 1) == 0)
  4337.           yylval.ttype
  4338.         = build_int_2 (result & ((unsigned) ~0
  4339.                      >> (HOST_BITS_PER_INT - num_bits)),
  4340.                    0);
  4341.         else
  4342.           yylval.ttype
  4343.         = build_int_2 (result | ~((unsigned) ~0
  4344.                       >> (HOST_BITS_PER_INT - num_bits)),
  4345.                    -1);
  4346.       }
  4347.     else
  4348.       yylval.ttype = build_int_2 (result, 0);
  4349.  
  4350.     TREE_TYPE (yylval.ttype) = integer_type_node;
  4351.     value = CONSTANT; break;
  4352.       }
  4353.  
  4354.     case '"':
  4355.     string_constant:
  4356.       {
  4357.     int *widep;
  4358. #ifdef APPLE_C
  4359.     /* Flag to detect strings beginning with backslash-p */
  4360.     int pascalstring = FALSE;
  4361. #endif /* APPLE_C */
  4362.  
  4363.     c = getc (finput);
  4364.     p = token_buffer + 1;
  4365.  
  4366.     if (wide_flag)
  4367.       widep = wide_buffer;
  4368.  
  4369.     while (c != '"' && c >= 0)
  4370.       {
  4371.         if (c == '\\')
  4372.           {
  4373.         c = readescape ();
  4374. #ifdef APPLE_C
  4375.         /* readescape returns a -2 to indicate it saw backslash-p */
  4376.         if (c == -2)
  4377.           { pascalstring = TRUE; c = '\0'; goto regularchar; }
  4378. #endif /* APPLE_C */
  4379.         if (c < 0)
  4380.           goto skipnewline;
  4381.         if (!wide_flag && c >= (1 << TYPE_PRECISION (char_type_node)))
  4382.           warning ("escape sequence out of range for character");
  4383.           }
  4384.         else if (c == '\n')
  4385.           {
  4386.         if (pedantic)
  4387.           warning ("ANSI C forbids newline in string constant");
  4388.         lineno++;
  4389.           }
  4390. #ifdef APPLE_C
  4391.         /* a label to escape to (ugh) */
  4392. regularchar:
  4393.  
  4394. #endif /* APPLE_C */
  4395.         /* Store the char in C into the appropriate buffer.  */
  4396.  
  4397.         if (wide_flag)
  4398.           {
  4399.         if (widep == wide_buffer + max_wide)
  4400.           {
  4401.             int n = widep - wide_buffer;
  4402.             max_wide *= 2;
  4403.             wide_buffer = (int *) xrealloc (wide_buffer, max_wide + 1);
  4404.             widep = wide_buffer + n;
  4405.           }
  4406.         *widep++ = c;
  4407.           }
  4408.         else
  4409.           {
  4410.         if (p == token_buffer + maxtoken)
  4411.           p = extend_token_buffer (p);
  4412.         *p++ = c;
  4413.           }
  4414.  
  4415.       skipnewline:
  4416.         c = getc (finput);
  4417.       }
  4418. #ifdef APPLE_C
  4419.     /* If we saw a backslash-p, jam the length in; subtracting 2 first
  4420.        (don't count length char, don't count 0 at end). */
  4421.     if (pascalstring)
  4422.       {
  4423.         if (wide_flag)
  4424.           wide_buffer[0] = widep - wide_buffer - 2;
  4425.         else
  4426.           token_buffer[1] = p - token_buffer - 2;
  4427.       }
  4428. #endif /* APPLE_C */
  4429.  
  4430.     /* We have read the entire constant.
  4431.        Construct a STRING_CST for the result.  */
  4432.  
  4433.     if (wide_flag)
  4434.       {
  4435.         /* If this is a L"..." wide-string, make a vector
  4436.            of the ints in wide_buffer.  */
  4437.         *widep = 0;
  4438.         /* We have not implemented the case where `int'
  4439.            on the target and on the execution machine differ in size.  */
  4440.         if (TYPE_PRECISION (integer_type_node)
  4441.         != sizeof (int) * BITS_PER_UNIT)
  4442.           abort ();
  4443.         yylval.ttype
  4444.           = build_string ((widep - wide_buffer + 1) * sizeof (int),
  4445.                   wide_buffer);
  4446.         TREE_TYPE (yylval.ttype) = int_array_type_node;
  4447.       }
  4448.     else
  4449.       {
  4450.         *p = 0;
  4451.         yylval.ttype = build_string (p - token_buffer, token_buffer + 1);
  4452.         TREE_TYPE (yylval.ttype) = char_array_type_node;
  4453.       }
  4454.  
  4455.     *p++ = '"';
  4456.     *p = 0;
  4457.  
  4458.     value = STRING; break;
  4459.       }
  4460.  
  4461.     case '+':
  4462.     case '-':
  4463.     case '&':
  4464.     case '|':
  4465.     case '<':
  4466.     case '>':
  4467.     case '*':
  4468.     case '/':
  4469.     case '%':
  4470.     case '^':
  4471.     case '!':
  4472.     case '=':
  4473.       {
  4474.     register int c1;
  4475.  
  4476.       combine:
  4477.  
  4478.     switch (c)
  4479.       {
  4480.       case '+':
  4481.         yylval.code = PLUS_EXPR; break;
  4482.       case '-':
  4483.         yylval.code = MINUS_EXPR; break;
  4484.       case '&':
  4485.         yylval.code = BIT_AND_EXPR; break;
  4486.       case '|':
  4487.         yylval.code = BIT_IOR_EXPR; break;
  4488.       case '*':
  4489.         yylval.code = MULT_EXPR; break;
  4490.       case '/':
  4491.         yylval.code = TRUNC_DIV_EXPR; break;
  4492.       case '%':
  4493.         yylval.code = TRUNC_MOD_EXPR; break;
  4494.       case '^':
  4495.         yylval.code = BIT_XOR_EXPR; break;
  4496.       case LSHIFT:
  4497.         yylval.code = LSHIFT_EXPR; break;
  4498.       case RSHIFT:
  4499.         yylval.code = RSHIFT_EXPR; break;
  4500.       case '<':
  4501.         yylval.code = LT_EXPR; break;
  4502.       case '>':
  4503.         yylval.code = GT_EXPR; break;
  4504.       }
  4505.  
  4506.     token_buffer[1] = c1 = getc (finput);
  4507.     token_buffer[2] = 0;
  4508.  
  4509.     if (c1 == '=')
  4510.       {
  4511.         switch (c)
  4512.           {
  4513.           case '<':
  4514.         value = ARITHCOMPARE; yylval.code = LE_EXPR; goto done;
  4515.           case '>':
  4516.         value = ARITHCOMPARE; yylval.code = GE_EXPR; goto done;
  4517.           case '!':
  4518.         value = EQCOMPARE; yylval.code = NE_EXPR; goto done;
  4519.           case '=':
  4520.         value = EQCOMPARE; yylval.code = EQ_EXPR; goto done;
  4521.           }
  4522.         value = ASSIGN; goto done;
  4523.       }
  4524.     else if (c == c1)
  4525.       switch (c)
  4526.         {
  4527.         case '+':
  4528.           value = PLUSPLUS; goto done;
  4529.         case '-':
  4530.           value = MINUSMINUS; goto done;
  4531.         case '&':
  4532.           value = ANDAND; goto done;
  4533.         case '|':
  4534.           value = OROR; goto done;
  4535.         case '<':
  4536.           c = LSHIFT;
  4537.           goto combine;
  4538.         case '>':
  4539.           c = RSHIFT;
  4540.           goto combine;
  4541.         }
  4542.     else if ((c == '-') && (c1 == '>'))
  4543.       { value = POINTSAT; goto done; }
  4544.     ungetc (c1, finput);
  4545.     token_buffer[1] = 0;
  4546.  
  4547.     if ((c == '<') || (c == '>'))
  4548.       value = ARITHCOMPARE;
  4549.     else value = c;
  4550.     goto done;
  4551.       }
  4552.  
  4553.     case 0:
  4554.       /* Don't make yyparse think this is eof.  */
  4555.       value = 1;
  4556.       break;
  4557.  
  4558.     default:
  4559.       value = c;
  4560.     }
  4561.  
  4562. done:
  4563. /*  yylloc.last_line = lineno; */
  4564.  
  4565.   return value;
  4566. }
  4567. #ifdef APPLE_C
  4568. /* This will update the segment name from what is at the file pointer. */
  4569. /* Done this way because this is happening during lexical analysis. */
  4570.  
  4571. replace_segment_name(fp)
  4572. FILE *fp;
  4573. {
  4574.     int i = 0;
  4575.     char ch, tmpbuf[200];  /* bleah */
  4576.     extern char *segment_name;
  4577.     extern FILE *asm_out_file;
  4578.  
  4579.     while ((ch = getc(fp)) != EOF && ch != ' ' && ch != '\n') {
  4580.     tmpbuf[i++] = ch;
  4581.     if (i >= 200) abort ();  /* something's bad wrong if this happens */
  4582.     }
  4583.     if (ch == '\n') ungetc(ch, fp);
  4584.     tmpbuf[i] = '\0';
  4585.     segment_name = (char *) malloc (200);
  4586.     strcpy(segment_name, tmpbuf);
  4587. #ifdef ASM_SEGMENT_NAME
  4588.     ASM_SEGMENT_NAME (asm_out_file, segment_name);
  4589. #endif
  4590. }
  4591. #endif /* APPLE_C */
  4592.  
  4593.  
  4594. init_parse()
  4595. {
  4596. #define INIT_LEX
  4597. #include "init.c"
  4598. }
  4599.